[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:

3d3572f590

@fweimer-rh @tstellar

(cherry picked from commit 0a17483c481d82eace3b36aee9cacb619eb027af)
This commit is contained in:
cqwrteur 2025-07-25 03:49:49 +08:00 committed by Tobias Hieta
parent d9ddd18544
commit 9869d43fc2
4 changed files with 26 additions and 1 deletions

View File

@ -344,12 +344,16 @@ static void ioctl_table_fill() {
_(SOUND_PCM_WRITE_CHANNELS, WRITE, sizeof(int)); _(SOUND_PCM_WRITE_CHANNELS, WRITE, sizeof(int));
_(SOUND_PCM_WRITE_FILTER, WRITE, sizeof(int)); _(SOUND_PCM_WRITE_FILTER, WRITE, sizeof(int));
_(TCFLSH, NONE, 0); _(TCFLSH, NONE, 0);
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
_(TCGETS, WRITE, struct_termios_sz); _(TCGETS, WRITE, struct_termios_sz);
# endif
_(TCSBRK, NONE, 0); _(TCSBRK, NONE, 0);
_(TCSBRKP, NONE, 0); _(TCSBRKP, NONE, 0);
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
_(TCSETS, READ, struct_termios_sz); _(TCSETS, READ, struct_termios_sz);
_(TCSETSF, READ, struct_termios_sz); _(TCSETSF, READ, struct_termios_sz);
_(TCSETSW, READ, struct_termios_sz); _(TCSETSW, READ, struct_termios_sz);
# endif
_(TCXONC, NONE, 0); _(TCXONC, NONE, 0);
_(TIOCGLCKTRMIOS, WRITE, struct_termios_sz); _(TIOCGLCKTRMIOS, WRITE, struct_termios_sz);
_(TIOCGSOFTCAR, WRITE, sizeof(int)); _(TIOCGSOFTCAR, WRITE, sizeof(int));

View File

@ -482,4 +482,19 @@
# define SANITIZER_START_BACKGROUND_THREAD_IN_ASAN_INTERNAL 0 # define SANITIZER_START_BACKGROUND_THREAD_IN_ASAN_INTERNAL 0
#endif #endif
#if SANITIZER_LINUX
# if SANITIZER_GLIBC
// Workaround for
// glibc/commit/3d3572f59059e2b19b8541ea648a6172136ec42e
// Linux: Keep termios ioctl constants strictly internal
# if __GLIBC_PREREQ(2, 41)
# define SANITIZER_TERMIOS_IOCTL_CONSTANTS 0
# else
# define SANITIZER_TERMIOS_IOCTL_CONSTANTS 1
# endif
# else
# define SANITIZER_TERMIOS_IOCTL_CONSTANTS 1
# endif
#endif
#endif // SANITIZER_PLATFORM_H #endif // SANITIZER_PLATFORM_H

View File

@ -780,15 +780,19 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
#endif // SOUND_VERSION #endif // SOUND_VERSION
unsigned IOCTL_TCFLSH = TCFLSH; unsigned IOCTL_TCFLSH = TCFLSH;
unsigned IOCTL_TCGETA = TCGETA; unsigned IOCTL_TCGETA = TCGETA;
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
unsigned IOCTL_TCGETS = TCGETS; unsigned IOCTL_TCGETS = TCGETS;
# endif
unsigned IOCTL_TCSBRK = TCSBRK; unsigned IOCTL_TCSBRK = TCSBRK;
unsigned IOCTL_TCSBRKP = TCSBRKP; unsigned IOCTL_TCSBRKP = TCSBRKP;
unsigned IOCTL_TCSETA = TCSETA; unsigned IOCTL_TCSETA = TCSETA;
unsigned IOCTL_TCSETAF = TCSETAF; unsigned IOCTL_TCSETAF = TCSETAF;
unsigned IOCTL_TCSETAW = TCSETAW; unsigned IOCTL_TCSETAW = TCSETAW;
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
unsigned IOCTL_TCSETS = TCSETS; unsigned IOCTL_TCSETS = TCSETS;
unsigned IOCTL_TCSETSF = TCSETSF; unsigned IOCTL_TCSETSF = TCSETSF;
unsigned IOCTL_TCSETSW = TCSETSW; unsigned IOCTL_TCSETSW = TCSETSW;
# endif
unsigned IOCTL_TCXONC = TCXONC; unsigned IOCTL_TCXONC = TCXONC;
unsigned IOCTL_TIOCGLCKTRMIOS = TIOCGLCKTRMIOS; unsigned IOCTL_TIOCGLCKTRMIOS = TIOCGLCKTRMIOS;
unsigned IOCTL_TIOCGSOFTCAR = TIOCGSOFTCAR; unsigned IOCTL_TIOCGSOFTCAR = TIOCGSOFTCAR;

View File

@ -1315,15 +1315,17 @@ extern unsigned IOCTL_SNDCTL_COPR_WCODE;
extern unsigned IOCTL_SNDCTL_COPR_WDATA; extern unsigned IOCTL_SNDCTL_COPR_WDATA;
extern unsigned IOCTL_TCFLSH; extern unsigned IOCTL_TCFLSH;
extern unsigned IOCTL_TCGETA; extern unsigned IOCTL_TCGETA;
extern unsigned IOCTL_TCGETS;
extern unsigned IOCTL_TCSBRK; extern unsigned IOCTL_TCSBRK;
extern unsigned IOCTL_TCSBRKP; extern unsigned IOCTL_TCSBRKP;
extern unsigned IOCTL_TCSETA; extern unsigned IOCTL_TCSETA;
extern unsigned IOCTL_TCSETAF; extern unsigned IOCTL_TCSETAF;
extern unsigned IOCTL_TCSETAW; extern unsigned IOCTL_TCSETAW;
# if SANITIZER_TERMIOS_IOCTL_CONSTANTS
extern unsigned IOCTL_TCGETS;
extern unsigned IOCTL_TCSETS; extern unsigned IOCTL_TCSETS;
extern unsigned IOCTL_TCSETSF; extern unsigned IOCTL_TCSETSF;
extern unsigned IOCTL_TCSETSW; extern unsigned IOCTL_TCSETSW;
# endif
extern unsigned IOCTL_TCXONC; extern unsigned IOCTL_TCXONC;
extern unsigned IOCTL_TIOCGLCKTRMIOS; extern unsigned IOCTL_TIOCGLCKTRMIOS;
extern unsigned IOCTL_TIOCGSOFTCAR; extern unsigned IOCTL_TIOCGSOFTCAR;