Skip to content

Commit 9a65c48

Browse files
trcrsiredllvmbot
authored andcommitted
[sanitizer] Remove usage of termios ioctl constants on Linux glibc since 2.41 (#149140)
glibc 2.42 made all usage of termios ioctl constants strictly internal Therefore, we remove all usage for those removed constants. This should only apply for Linux. Fix #149103 Reference: bminor/glibc@3d3572f @fweimer-rh @tstellar (cherry picked from commit 0a17483)
1 parent 80a6bc7 commit 9a65c48

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-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: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,4 +482,19 @@
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
498+
#endif
499+
485500
#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
@@ -1315,15 +1315,17 @@ extern unsigned IOCTL_SNDCTL_COPR_WCODE;
13151315
extern unsigned IOCTL_SNDCTL_COPR_WDATA;
13161316
extern unsigned IOCTL_TCFLSH;
13171317
extern unsigned IOCTL_TCGETA;
1318-
extern unsigned IOCTL_TCGETS;
13191318
extern unsigned IOCTL_TCSBRK;
13201319
extern unsigned IOCTL_TCSBRKP;
13211320
extern unsigned IOCTL_TCSETA;
13221321
extern unsigned IOCTL_TCSETAF;
13231322
extern unsigned IOCTL_TCSETAW;
1323+
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
1324+
extern unsigned IOCTL_TCGETS;
13241325
extern unsigned IOCTL_TCSETS;
13251326
extern unsigned IOCTL_TCSETSF;
13261327
extern unsigned IOCTL_TCSETSW;
1328+
# endif
13271329
extern unsigned IOCTL_TCXONC;
13281330
extern unsigned IOCTL_TIOCGLCKTRMIOS;
13291331
extern unsigned IOCTL_TIOCGSOFTCAR;

0 commit comments

Comments
 (0)