Skip to content

Commit 459e1cd

Browse files
committed
[sanitizer] Remove usage of termios ioctl constants for glibc
glibc 2.42 made all usage of termios ioctl constants strictly internal. Therefore, we remove all usage for those removed constants for glibc. We keep a pesudo definition for PowerPC to make bots happy. [sanitizer] avoid using ioctl constants for glibc above 2.41
1 parent c27e283 commit 459e1cd

File tree

4 files changed

+24
-1
lines changed

4 files changed

+24
-1
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,12 +344,16 @@ static void ioctl_table_fill() {
344344
_(SOUND_PCM_WRITE_CHANNELS, WRITE, sizeof(int));
345345
_(SOUND_PCM_WRITE_FILTER, WRITE, sizeof(int));
346346
_(TCFLSH, NONE, 0);
347+
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
347348
_(TCGETS, WRITE, struct_termios_sz);
349+
# endif
348350
_(TCSBRK, NONE, 0);
349351
_(TCSBRKP, NONE, 0);
352+
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
350353
_(TCSETS, READ, struct_termios_sz);
351354
_(TCSETSF, READ, struct_termios_sz);
352355
_(TCSETSW, READ, struct_termios_sz);
356+
# endif
353357
_(TCXONC, NONE, 0);
354358
_(TIOCGLCKTRMIOS, WRITE, struct_termios_sz);
355359
_(TIOCGSOFTCAR, WRITE, sizeof(int));

compiler-rt/lib/sanitizer_common/sanitizer_platform.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,4 +482,17 @@
482482
# define SANITIZER_START_BACKGROUND_THREAD_IN_ASAN_INTERNAL 0
483483
#endif
484484

485+
#if SANITIZER_LINUX
486+
# if SANITIZER_GLIBC
487+
// Workaround for
488+
// glibc/commit/3d3572f59059e2b19b8541ea648a6172136ec42e
489+
// Linux: Keep termios ioctl constants strictly internal
490+
# if __GLIBC_PREREQ(2, 41)
491+
# define SANITIZER_TERMIOS_IOCTL_CONSTANTS 0
492+
# else
493+
# define SANITIZER_TERMIOS_IOCTL_CONSTANTS 1
494+
# endif
495+
# else
496+
# define SANITIZER_TERMIOS_IOCTL_CONSTANTS 1
497+
# endif
485498
#endif // SANITIZER_PLATFORM_H

compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,15 +780,19 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
780780
#endif // SOUND_VERSION
781781
unsigned IOCTL_TCFLSH = TCFLSH;
782782
unsigned IOCTL_TCGETA = TCGETA;
783+
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
783784
unsigned IOCTL_TCGETS = TCGETS;
785+
# endif
784786
unsigned IOCTL_TCSBRK = TCSBRK;
785787
unsigned IOCTL_TCSBRKP = TCSBRKP;
786788
unsigned IOCTL_TCSETA = TCSETA;
787789
unsigned IOCTL_TCSETAF = TCSETAF;
788790
unsigned IOCTL_TCSETAW = TCSETAW;
791+
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
789792
unsigned IOCTL_TCSETS = TCSETS;
790793
unsigned IOCTL_TCSETSF = TCSETSF;
791794
unsigned IOCTL_TCSETSW = TCSETSW;
795+
# endif
792796
unsigned IOCTL_TCXONC = TCXONC;
793797
unsigned IOCTL_TIOCGLCKTRMIOS = TIOCGLCKTRMIOS;
794798
unsigned IOCTL_TIOCGSOFTCAR = TIOCGSOFTCAR;

compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1313,15 +1313,17 @@ extern unsigned IOCTL_SNDCTL_COPR_WCODE;
13131313
extern unsigned IOCTL_SNDCTL_COPR_WDATA;
13141314
extern unsigned IOCTL_TCFLSH;
13151315
extern unsigned IOCTL_TCGETA;
1316-
extern unsigned IOCTL_TCGETS;
13171316
extern unsigned IOCTL_TCSBRK;
13181317
extern unsigned IOCTL_TCSBRKP;
13191318
extern unsigned IOCTL_TCSETA;
13201319
extern unsigned IOCTL_TCSETAF;
13211320
extern unsigned IOCTL_TCSETAW;
1321+
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
1322+
extern unsigned IOCTL_TCGETS;
13221323
extern unsigned IOCTL_TCSETS;
13231324
extern unsigned IOCTL_TCSETSF;
13241325
extern unsigned IOCTL_TCSETSW;
1326+
# endif
13251327
extern unsigned IOCTL_TCXONC;
13261328
extern unsigned IOCTL_TIOCGLCKTRMIOS;
13271329
extern unsigned IOCTL_TIOCGSOFTCAR;

0 commit comments

Comments
 (0)