Skip to content

Commit d011ca7

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.
1 parent 1c541aa commit d011ca7

File tree

4 files changed

+41
-9
lines changed

4 files changed

+41
-9
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc

Lines changed: 8 additions & 4 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-
_(TCGETS, WRITE, struct_termios_sz);
347+
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
348+
_(SANITIZER_TCGETS, WRITE, struct_termios_sz);
349+
# endif
348350
_(TCSBRK, NONE, 0);
349351
_(TCSBRKP, NONE, 0);
350-
_(TCSETS, READ, struct_termios_sz);
351-
_(TCSETSF, READ, struct_termios_sz);
352-
_(TCSETSW, READ, struct_termios_sz);
352+
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
353+
_(SANITIZER_TCSETS, READ, struct_termios_sz);
354+
_(SANITIZER_TCSETSF, READ, struct_termios_sz);
355+
_(SANITIZER_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: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,4 +482,26 @@
482482
# define SANITIZER_START_BACKGROUND_THREAD_IN_ASAN_INTERNAL 0
483483
#endif
484484

485+
#if SANITIZER_LINUX
486+
# if !SANITIZER_GLIBC || SANITIZER_PPC
487+
// Workaround for
488+
// glibc/commit/3d3572f59059e2b19b8541ea648a6172136ec42e
489+
// Linux: Keep termios ioctl constants strictly internal
490+
# define SANITIZER_TERMIOS_IOCTL_CONSTANTS 1
491+
# if SANITIZER_GLIBC && SANITIZER_PPC
492+
# define SANITIZER_TCGETS 0x402c7413
493+
# define SANITIZER_TCSETS 0x802c7414
494+
# define SANITIZER_TCSETSF 0x802c7415
495+
# define SANITIZER_TCSETSW 0x802c7416
496+
# else
497+
# define SANITIZER_TCGETS TCGETS
498+
# define SANITIZER_TCSETS TCSETS
499+
# define SANITIZER_TCSETSF TCSETSF
500+
# define SANITIZER_TCSETSW TCSETSW
501+
# endif
502+
# else
503+
# define SANITIZER_TERMIOS_IOCTL_CONSTANTS 0
504+
# endif
505+
#endif
506+
485507
#endif // SANITIZER_PLATFORM_H

compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp

Lines changed: 8 additions & 4 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-
unsigned IOCTL_TCGETS = TCGETS;
783+
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
784+
unsigned IOCTL_TCGETS = SANITIZER_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;
789-
unsigned IOCTL_TCSETS = TCSETS;
790-
unsigned IOCTL_TCSETSF = TCSETSF;
791-
unsigned IOCTL_TCSETSW = TCSETSW;
791+
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
792+
unsigned IOCTL_TCSETS = SANITIZER_TCSETS;
793+
unsigned IOCTL_TCSETSF = SANITIZER_TCSETSF;
794+
unsigned IOCTL_TCSETSW = SANITIZER_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)