1 //===-- sanitizer_platform_limits_posix.h ---------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file is a part of Sanitizer common code. 10 // 11 // Sizes and layouts of platform-specific POSIX data structures. 12 //===----------------------------------------------------------------------===// 13 14 #ifndef SANITIZER_PLATFORM_LIMITS_POSIX_H 15 #define SANITIZER_PLATFORM_LIMITS_POSIX_H 16 17 #if SANITIZER_LINUX || SANITIZER_MAC 18 19 #include "sanitizer_internal_defs.h" 20 #include "sanitizer_platform.h" 21 22 #if defined(__sparc__) 23 // FIXME: This can't be included from tsan which does not support sparc yet. 24 #include "sanitizer_glibc_version.h" 25 #endif 26 27 # define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) ((link_map*)(handle)) 28 29 namespace __sanitizer { 30 extern unsigned struct_utsname_sz; 31 extern unsigned struct_stat_sz; 32 #if !SANITIZER_IOS 33 extern unsigned struct_stat64_sz; 34 #endif 35 extern unsigned struct_rusage_sz; 36 extern unsigned siginfo_t_sz; 37 extern unsigned struct_itimerval_sz; 38 extern unsigned pthread_t_sz; 39 extern unsigned pthread_mutex_t_sz; 40 extern unsigned pthread_cond_t_sz; 41 extern unsigned pid_t_sz; 42 extern unsigned timeval_sz; 43 extern unsigned uid_t_sz; 44 extern unsigned gid_t_sz; 45 extern unsigned mbstate_t_sz; 46 extern unsigned struct_timezone_sz; 47 extern unsigned struct_tms_sz; 48 extern unsigned struct_itimerspec_sz; 49 extern unsigned struct_sigevent_sz; 50 extern unsigned struct_stack_t_sz; 51 extern unsigned struct_sched_param_sz; 52 extern unsigned struct_statfs64_sz; 53 extern unsigned struct_regex_sz; 54 extern unsigned struct_regmatch_sz; 55 56 #if !SANITIZER_ANDROID 57 extern unsigned struct_fstab_sz; 58 extern unsigned struct_statfs_sz; 59 extern unsigned struct_sockaddr_sz; 60 extern unsigned ucontext_t_sz; 61 #endif // !SANITIZER_ANDROID 62 63 #if SANITIZER_LINUX 64 65 #if defined(__x86_64__) 66 const unsigned struct_kernel_stat_sz = 144; 67 const unsigned struct_kernel_stat64_sz = 0; 68 #elif defined(__i386__) 69 const unsigned struct_kernel_stat_sz = 64; 70 const unsigned struct_kernel_stat64_sz = 96; 71 #elif defined(__arm__) 72 const unsigned struct_kernel_stat_sz = 64; 73 const unsigned struct_kernel_stat64_sz = 104; 74 #elif defined(__aarch64__) 75 const unsigned struct_kernel_stat_sz = 128; 76 const unsigned struct_kernel_stat64_sz = 104; 77 #elif defined(__powerpc__) && !defined(__powerpc64__) 78 const unsigned struct_kernel_stat_sz = 72; 79 const unsigned struct_kernel_stat64_sz = 104; 80 #elif defined(__powerpc64__) 81 const unsigned struct_kernel_stat_sz = 144; 82 const unsigned struct_kernel_stat64_sz = 104; 83 #elif defined(__mips__) 84 const unsigned struct_kernel_stat_sz = SANITIZER_ANDROID 85 ? FIRST_32_SECOND_64(104, 128) 86 : FIRST_32_SECOND_64(144, 216); 87 const unsigned struct_kernel_stat64_sz = 104; 88 #elif defined(__s390__) && !defined(__s390x__) 89 const unsigned struct_kernel_stat_sz = 64; 90 const unsigned struct_kernel_stat64_sz = 104; 91 #elif defined(__s390x__) 92 const unsigned struct_kernel_stat_sz = 144; 93 const unsigned struct_kernel_stat64_sz = 0; 94 #elif defined(__sparc__) && defined(__arch64__) 95 const unsigned struct___old_kernel_stat_sz = 0; 96 const unsigned struct_kernel_stat_sz = 104; 97 const unsigned struct_kernel_stat64_sz = 144; 98 #elif defined(__sparc__) && !defined(__arch64__) 99 const unsigned struct___old_kernel_stat_sz = 0; 100 const unsigned struct_kernel_stat_sz = 64; 101 const unsigned struct_kernel_stat64_sz = 104; 102 #elif SANITIZER_RISCV64 103 const unsigned struct_kernel_stat_sz = 128; 104 const unsigned struct_kernel_stat64_sz = 0; // RISCV64 does not use stat64 105 # elif defined(__hexagon__) 106 const unsigned struct_kernel_stat_sz = 128; 107 const unsigned struct_kernel_stat64_sz = 0; 108 # endif 109 struct __sanitizer_perf_event_attr { 110 unsigned type; 111 unsigned size; 112 // More fields that vary with the kernel version. 113 }; 114 115 extern unsigned struct_epoll_event_sz; 116 extern unsigned struct_sysinfo_sz; 117 extern unsigned __user_cap_header_struct_sz; 118 extern unsigned __user_cap_data_struct_sz; 119 extern unsigned struct_new_utsname_sz; 120 extern unsigned struct_old_utsname_sz; 121 extern unsigned struct_oldold_utsname_sz; 122 123 const unsigned struct_kexec_segment_sz = 4 * sizeof(unsigned long); 124 #endif // SANITIZER_LINUX 125 126 #if SANITIZER_LINUX 127 128 #if defined(__powerpc64__) || defined(__s390__) 129 const unsigned struct___old_kernel_stat_sz = 0; 130 #elif !defined(__sparc__) 131 const unsigned struct___old_kernel_stat_sz = 32; 132 #endif 133 134 extern unsigned struct_rlimit_sz; 135 extern unsigned struct_utimbuf_sz; 136 extern unsigned struct_timespec_sz; 137 138 struct __sanitizer_iocb { 139 u64 aio_data; 140 u32 aio_key_or_aio_reserved1; // Simply crazy. 141 u32 aio_reserved1_or_aio_key; // Luckily, we don't need these. 142 u16 aio_lio_opcode; 143 s16 aio_reqprio; 144 u32 aio_fildes; 145 u64 aio_buf; 146 u64 aio_nbytes; 147 s64 aio_offset; 148 u64 aio_reserved2; 149 u64 aio_reserved3; 150 }; 151 152 struct __sanitizer_io_event { 153 u64 data; 154 u64 obj; 155 u64 res; 156 u64 res2; 157 }; 158 159 const unsigned iocb_cmd_pread = 0; 160 const unsigned iocb_cmd_pwrite = 1; 161 const unsigned iocb_cmd_preadv = 7; 162 const unsigned iocb_cmd_pwritev = 8; 163 164 struct __sanitizer___sysctl_args { 165 int *name; 166 int nlen; 167 void *oldval; 168 uptr *oldlenp; 169 void *newval; 170 uptr newlen; 171 unsigned long ___unused[4]; 172 }; 173 174 const unsigned old_sigset_t_sz = sizeof(unsigned long); 175 176 struct __sanitizer_sem_t { 177 #if SANITIZER_ANDROID && defined(_LP64) 178 int data[4]; 179 #elif SANITIZER_ANDROID && !defined(_LP64) 180 int data; 181 #elif SANITIZER_LINUX 182 uptr data[4]; 183 #endif 184 }; 185 #endif // SANITIZER_LINUX 186 187 #if SANITIZER_ANDROID 188 struct __sanitizer_struct_mallinfo { 189 uptr v[10]; 190 }; 191 #endif 192 193 #if SANITIZER_LINUX && !SANITIZER_ANDROID 194 struct __sanitizer_struct_mallinfo { 195 int v[10]; 196 }; 197 198 extern unsigned struct_ustat_sz; 199 extern unsigned struct_rlimit64_sz; 200 extern unsigned struct_statvfs64_sz; 201 202 struct __sanitizer_ipc_perm { 203 int __key; 204 int uid; 205 int gid; 206 int cuid; 207 int cgid; 208 #ifdef __powerpc__ 209 unsigned mode; 210 unsigned __seq; 211 u64 __unused1; 212 u64 __unused2; 213 #elif defined(__sparc__) 214 unsigned mode; 215 unsigned short __pad2; 216 unsigned short __seq; 217 unsigned long long __unused1; 218 unsigned long long __unused2; 219 #else 220 unsigned int mode; 221 unsigned short __seq; 222 unsigned short __pad2; 223 #if defined(__x86_64__) && !defined(_LP64) 224 u64 __unused1; 225 u64 __unused2; 226 #else 227 unsigned long __unused1; 228 unsigned long __unused2; 229 #endif 230 #endif 231 }; 232 233 struct __sanitizer_shmid_ds { 234 __sanitizer_ipc_perm shm_perm; 235 #if defined(__sparc__) 236 #if !defined(__arch64__) 237 u32 __pad1; 238 #endif 239 long shm_atime; 240 #if !defined(__arch64__) 241 u32 __pad2; 242 #endif 243 long shm_dtime; 244 #if !defined(__arch64__) 245 u32 __pad3; 246 #endif 247 long shm_ctime; 248 uptr shm_segsz; 249 int shm_cpid; 250 int shm_lpid; 251 unsigned long shm_nattch; 252 unsigned long __glibc_reserved1; 253 unsigned long __glibc_reserved2; 254 #else 255 #ifndef __powerpc__ 256 uptr shm_segsz; 257 #elif !defined(__powerpc64__) 258 uptr __unused0; 259 #endif 260 #if defined(__x86_64__) && !defined(_LP64) 261 u64 shm_atime; 262 u64 shm_dtime; 263 u64 shm_ctime; 264 #else 265 uptr shm_atime; 266 #if !defined(_LP64) && !defined(__mips__) 267 uptr __unused1; 268 #endif 269 uptr shm_dtime; 270 #if !defined(_LP64) && !defined(__mips__) 271 uptr __unused2; 272 #endif 273 uptr shm_ctime; 274 #if !defined(_LP64) && !defined(__mips__) 275 uptr __unused3; 276 #endif 277 #endif 278 #ifdef __powerpc__ 279 uptr shm_segsz; 280 #endif 281 int shm_cpid; 282 int shm_lpid; 283 #if defined(__x86_64__) && !defined(_LP64) 284 u64 shm_nattch; 285 u64 __unused4; 286 u64 __unused5; 287 #else 288 uptr shm_nattch; 289 uptr __unused4; 290 uptr __unused5; 291 #endif 292 #endif 293 }; 294 #endif 295 296 #if SANITIZER_LINUX && !SANITIZER_ANDROID 297 extern unsigned struct_msqid_ds_sz; 298 extern unsigned struct_mq_attr_sz; 299 extern unsigned struct_timex_sz; 300 extern unsigned struct_statvfs_sz; 301 extern unsigned struct_crypt_data_sz; 302 #endif // SANITIZER_LINUX && !SANITIZER_ANDROID 303 304 struct __sanitizer_iovec { 305 void *iov_base; 306 uptr iov_len; 307 }; 308 309 #if !SANITIZER_ANDROID 310 struct __sanitizer_ifaddrs { 311 struct __sanitizer_ifaddrs *ifa_next; 312 char *ifa_name; 313 unsigned int ifa_flags; 314 void *ifa_addr; // (struct sockaddr *) 315 void *ifa_netmask; // (struct sockaddr *) 316 // This is a union on Linux. 317 # ifdef ifa_dstaddr 318 # undef ifa_dstaddr 319 # endif 320 void *ifa_dstaddr; // (struct sockaddr *) 321 void *ifa_data; 322 }; 323 #endif // !SANITIZER_ANDROID 324 325 #if SANITIZER_MAC 326 typedef unsigned long __sanitizer_pthread_key_t; 327 #else 328 typedef unsigned __sanitizer_pthread_key_t; 329 #endif 330 331 #if SANITIZER_LINUX && !SANITIZER_ANDROID 332 333 struct __sanitizer_XDR { 334 int x_op; 335 void *x_ops; 336 uptr x_public; 337 uptr x_private; 338 uptr x_base; 339 unsigned x_handy; 340 }; 341 342 const int __sanitizer_XDR_ENCODE = 0; 343 const int __sanitizer_XDR_DECODE = 1; 344 const int __sanitizer_XDR_FREE = 2; 345 #endif 346 347 struct __sanitizer_passwd { 348 char *pw_name; 349 char *pw_passwd; 350 int pw_uid; 351 int pw_gid; 352 #if SANITIZER_MAC 353 long pw_change; 354 char *pw_class; 355 #endif 356 #if !(SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32)) 357 char *pw_gecos; 358 #endif 359 char *pw_dir; 360 char *pw_shell; 361 #if SANITIZER_MAC 362 long pw_expire; 363 #endif 364 }; 365 366 struct __sanitizer_group { 367 char *gr_name; 368 char *gr_passwd; 369 int gr_gid; 370 char **gr_mem; 371 }; 372 373 # if (defined(__x86_64__) && !defined(_LP64)) || defined(__hexagon__) 374 typedef long long __sanitizer_time_t; 375 #else 376 typedef long __sanitizer_time_t; 377 #endif 378 379 typedef long __sanitizer_suseconds_t; 380 381 struct __sanitizer_timeval { 382 __sanitizer_time_t tv_sec; 383 __sanitizer_suseconds_t tv_usec; 384 }; 385 386 struct __sanitizer_itimerval { 387 struct __sanitizer_timeval it_interval; 388 struct __sanitizer_timeval it_value; 389 }; 390 391 struct __sanitizer_timeb { 392 __sanitizer_time_t time; 393 unsigned short millitm; 394 short timezone; 395 short dstflag; 396 }; 397 398 struct __sanitizer_ether_addr { 399 u8 octet[6]; 400 }; 401 402 struct __sanitizer_tm { 403 int tm_sec; 404 int tm_min; 405 int tm_hour; 406 int tm_mday; 407 int tm_mon; 408 int tm_year; 409 int tm_wday; 410 int tm_yday; 411 int tm_isdst; 412 long int tm_gmtoff; 413 const char *tm_zone; 414 }; 415 416 #if SANITIZER_LINUX 417 struct __sanitizer_mntent { 418 char *mnt_fsname; 419 char *mnt_dir; 420 char *mnt_type; 421 char *mnt_opts; 422 int mnt_freq; 423 int mnt_passno; 424 }; 425 426 struct __sanitizer_file_handle { 427 unsigned int handle_bytes; 428 int handle_type; 429 unsigned char f_handle[1]; // variable sized 430 }; 431 #endif 432 433 #if SANITIZER_MAC 434 struct __sanitizer_msghdr { 435 void *msg_name; 436 unsigned msg_namelen; 437 struct __sanitizer_iovec *msg_iov; 438 unsigned msg_iovlen; 439 void *msg_control; 440 unsigned msg_controllen; 441 int msg_flags; 442 }; 443 struct __sanitizer_cmsghdr { 444 unsigned cmsg_len; 445 int cmsg_level; 446 int cmsg_type; 447 }; 448 #else 449 // In POSIX, int msg_iovlen; socklen_t msg_controllen; socklen_t cmsg_len; but 450 // many implementations don't conform to the standard. 451 struct __sanitizer_msghdr { 452 void *msg_name; 453 unsigned msg_namelen; 454 struct __sanitizer_iovec *msg_iov; 455 uptr msg_iovlen; 456 void *msg_control; 457 uptr msg_controllen; 458 int msg_flags; 459 }; 460 struct __sanitizer_cmsghdr { 461 uptr cmsg_len; 462 int cmsg_level; 463 int cmsg_type; 464 }; 465 #endif 466 467 #if SANITIZER_LINUX 468 struct __sanitizer_mmsghdr { 469 __sanitizer_msghdr msg_hdr; 470 unsigned int msg_len; 471 }; 472 #endif 473 474 #if SANITIZER_MAC 475 struct __sanitizer_dirent { 476 unsigned long long d_ino; 477 unsigned long long d_seekoff; 478 unsigned short d_reclen; 479 // more fields that we don't care about 480 }; 481 # elif SANITIZER_ANDROID || defined(__x86_64__) || defined(__hexagon__) 482 struct __sanitizer_dirent { 483 unsigned long long d_ino; 484 unsigned long long d_off; 485 unsigned short d_reclen; 486 // more fields that we don't care about 487 }; 488 # else 489 struct __sanitizer_dirent { 490 uptr d_ino; 491 uptr d_off; 492 unsigned short d_reclen; 493 // more fields that we don't care about 494 }; 495 # endif 496 497 # if SANITIZER_LINUX && !SANITIZER_ANDROID 498 struct __sanitizer_dirent64 { 499 unsigned long long d_ino; 500 unsigned long long d_off; 501 unsigned short d_reclen; 502 // more fields that we don't care about 503 }; 504 #endif 505 506 #if defined(__x86_64__) && !defined(_LP64) 507 typedef long long __sanitizer_clock_t; 508 #else 509 typedef long __sanitizer_clock_t; 510 #endif 511 512 #if SANITIZER_LINUX 513 typedef int __sanitizer_clockid_t; 514 #endif 515 516 #if SANITIZER_LINUX 517 # if defined(_LP64) || defined(__x86_64__) || defined(__powerpc__) || \ 518 defined(__mips__) || defined(__hexagon__) 519 typedef unsigned __sanitizer___kernel_uid_t; 520 typedef unsigned __sanitizer___kernel_gid_t; 521 #else 522 typedef unsigned short __sanitizer___kernel_uid_t; 523 typedef unsigned short __sanitizer___kernel_gid_t; 524 #endif 525 #if defined(__x86_64__) && !defined(_LP64) 526 typedef long long __sanitizer___kernel_off_t; 527 #else 528 typedef long __sanitizer___kernel_off_t; 529 #endif 530 531 #if defined(__powerpc__) || defined(__mips__) 532 typedef unsigned int __sanitizer___kernel_old_uid_t; 533 typedef unsigned int __sanitizer___kernel_old_gid_t; 534 #else 535 typedef unsigned short __sanitizer___kernel_old_uid_t; 536 typedef unsigned short __sanitizer___kernel_old_gid_t; 537 #endif 538 539 typedef long long __sanitizer___kernel_loff_t; 540 typedef struct { 541 unsigned long fds_bits[1024 / (8 * sizeof(long))]; 542 } __sanitizer___kernel_fd_set; 543 #endif 544 545 // This thing depends on the platform. We are only interested in the upper 546 // limit. Verified with a compiler assert in .cpp. 547 union __sanitizer_pthread_attr_t { 548 char size[128]; 549 void *align; 550 }; 551 552 #if SANITIZER_ANDROID 553 # if SANITIZER_MIPS 554 typedef unsigned long __sanitizer_sigset_t[16 / sizeof(unsigned long)]; 555 # else 556 typedef unsigned long __sanitizer_sigset_t; 557 # endif 558 #elif SANITIZER_MAC 559 typedef unsigned __sanitizer_sigset_t; 560 #elif SANITIZER_LINUX 561 struct __sanitizer_sigset_t { 562 // The size is determined by looking at sizeof of real sigset_t on linux. 563 uptr val[128 / sizeof(uptr)]; 564 }; 565 #endif 566 567 struct __sanitizer_siginfo { 568 // The size is determined by looking at sizeof of real siginfo_t on linux. 569 u64 opaque[128 / sizeof(u64)]; 570 }; 571 572 using __sanitizer_sighandler_ptr = void (*)(int sig); 573 using __sanitizer_sigactionhandler_ptr = void (*)(int sig, 574 __sanitizer_siginfo *siginfo, 575 void *uctx); 576 577 // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros. 578 #if SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 64) 579 struct __sanitizer_sigaction { 580 unsigned sa_flags; 581 union { 582 __sanitizer_sigactionhandler_ptr sigaction; 583 __sanitizer_sighandler_ptr handler; 584 }; 585 __sanitizer_sigset_t sa_mask; 586 void (*sa_restorer)(); 587 }; 588 #elif SANITIZER_ANDROID && SANITIZER_MIPS32 // check this before WORDSIZE == 32 589 struct __sanitizer_sigaction { 590 unsigned sa_flags; 591 union { 592 __sanitizer_sigactionhandler_ptr sigaction; 593 __sanitizer_sighandler_ptr handler; 594 }; 595 __sanitizer_sigset_t sa_mask; 596 }; 597 #elif SANITIZER_ANDROID && (SANITIZER_WORDSIZE == 32) 598 struct __sanitizer_sigaction { 599 union { 600 __sanitizer_sigactionhandler_ptr sigaction; 601 __sanitizer_sighandler_ptr handler; 602 }; 603 __sanitizer_sigset_t sa_mask; 604 uptr sa_flags; 605 void (*sa_restorer)(); 606 }; 607 #else // !SANITIZER_ANDROID 608 struct __sanitizer_sigaction { 609 #if defined(__mips__) && !SANITIZER_FREEBSD 610 unsigned int sa_flags; 611 #endif 612 union { 613 __sanitizer_sigactionhandler_ptr sigaction; 614 __sanitizer_sighandler_ptr handler; 615 }; 616 #if SANITIZER_FREEBSD 617 int sa_flags; 618 __sanitizer_sigset_t sa_mask; 619 #else 620 #if defined(__s390x__) 621 int sa_resv; 622 #else 623 __sanitizer_sigset_t sa_mask; 624 #endif 625 #ifndef __mips__ 626 #if defined(__sparc__) 627 #if __GLIBC_PREREQ (2, 20) 628 // On sparc glibc 2.19 and earlier sa_flags was unsigned long. 629 #if defined(__arch64__) 630 // To maintain ABI compatibility on sparc64 when switching to an int, 631 // __glibc_reserved0 was added. 632 int __glibc_reserved0; 633 #endif 634 int sa_flags; 635 #else 636 unsigned long sa_flags; 637 #endif 638 #else 639 int sa_flags; 640 #endif 641 #endif 642 #endif 643 #if SANITIZER_LINUX 644 void (*sa_restorer)(); 645 #endif 646 #if defined(__mips__) && (SANITIZER_WORDSIZE == 32) 647 int sa_resv[1]; 648 #endif 649 #if defined(__s390x__) 650 __sanitizer_sigset_t sa_mask; 651 #endif 652 }; 653 #endif // !SANITIZER_ANDROID 654 655 #if defined(__mips__) 656 #define __SANITIZER_KERNEL_NSIG 128 657 #else 658 #define __SANITIZER_KERNEL_NSIG 64 659 #endif 660 661 struct __sanitizer_kernel_sigset_t { 662 uptr sig[__SANITIZER_KERNEL_NSIG / (sizeof(uptr) * 8)]; 663 }; 664 665 // Linux system headers define the 'sa_handler' and 'sa_sigaction' macros. 666 #if SANITIZER_MIPS 667 struct __sanitizer_kernel_sigaction_t { 668 unsigned int sa_flags; 669 union { 670 void (*handler)(int signo); 671 void (*sigaction)(int signo, __sanitizer_siginfo *info, void *ctx); 672 }; 673 __sanitizer_kernel_sigset_t sa_mask; 674 void (*sa_restorer)(void); 675 }; 676 #else 677 struct __sanitizer_kernel_sigaction_t { 678 union { 679 void (*handler)(int signo); 680 void (*sigaction)(int signo, __sanitizer_siginfo *info, void *ctx); 681 }; 682 unsigned long sa_flags; 683 void (*sa_restorer)(void); 684 __sanitizer_kernel_sigset_t sa_mask; 685 }; 686 #endif 687 688 extern const uptr sig_ign; 689 extern const uptr sig_dfl; 690 extern const uptr sig_err; 691 extern const uptr sa_siginfo; 692 693 #if SANITIZER_LINUX 694 extern int e_tabsz; 695 #endif 696 697 extern int af_inet; 698 extern int af_inet6; 699 uptr __sanitizer_in_addr_sz(int af); 700 701 #if SANITIZER_LINUX 702 struct __sanitizer_dl_phdr_info { 703 uptr dlpi_addr; 704 const char *dlpi_name; 705 const void *dlpi_phdr; 706 short dlpi_phnum; 707 }; 708 709 extern unsigned struct_ElfW_Phdr_sz; 710 #endif 711 712 struct __sanitizer_protoent { 713 char *p_name; 714 char **p_aliases; 715 int p_proto; 716 }; 717 718 struct __sanitizer_netent { 719 char *n_name; 720 char **n_aliases; 721 int n_addrtype; 722 u32 n_net; 723 }; 724 725 struct __sanitizer_addrinfo { 726 int ai_flags; 727 int ai_family; 728 int ai_socktype; 729 int ai_protocol; 730 #if SANITIZER_ANDROID || SANITIZER_MAC 731 unsigned ai_addrlen; 732 char *ai_canonname; 733 void *ai_addr; 734 #else // LINUX 735 unsigned ai_addrlen; 736 void *ai_addr; 737 char *ai_canonname; 738 #endif 739 struct __sanitizer_addrinfo *ai_next; 740 }; 741 742 struct __sanitizer_hostent { 743 char *h_name; 744 char **h_aliases; 745 int h_addrtype; 746 int h_length; 747 char **h_addr_list; 748 }; 749 750 struct __sanitizer_pollfd { 751 int fd; 752 short events; 753 short revents; 754 }; 755 756 #if SANITIZER_ANDROID || SANITIZER_MAC 757 typedef unsigned __sanitizer_nfds_t; 758 #else 759 typedef unsigned long __sanitizer_nfds_t; 760 #endif 761 762 #if !SANITIZER_ANDROID 763 # if SANITIZER_LINUX 764 struct __sanitizer_glob_t { 765 uptr gl_pathc; 766 char **gl_pathv; 767 uptr gl_offs; 768 int gl_flags; 769 770 void (*gl_closedir)(void *dirp); 771 void *(*gl_readdir)(void *dirp); 772 void *(*gl_opendir)(const char *); 773 int (*gl_lstat)(const char *, void *); 774 int (*gl_stat)(const char *, void *); 775 }; 776 # endif // SANITIZER_LINUX 777 778 # if SANITIZER_LINUX 779 extern int glob_nomatch; 780 extern int glob_altdirfunc; 781 # endif 782 #endif // !SANITIZER_ANDROID 783 784 extern unsigned path_max; 785 786 # if !SANITIZER_ANDROID 787 extern const int wordexp_wrde_dooffs; 788 # endif // !SANITIZER_ANDROID 789 790 struct __sanitizer_wordexp_t { 791 uptr we_wordc; 792 char **we_wordv; 793 uptr we_offs; 794 }; 795 796 #if SANITIZER_LINUX && !SANITIZER_ANDROID 797 struct __sanitizer_FILE { 798 int _flags; 799 char *_IO_read_ptr; 800 char *_IO_read_end; 801 char *_IO_read_base; 802 char *_IO_write_base; 803 char *_IO_write_ptr; 804 char *_IO_write_end; 805 char *_IO_buf_base; 806 char *_IO_buf_end; 807 char *_IO_save_base; 808 char *_IO_backup_base; 809 char *_IO_save_end; 810 void *_markers; 811 __sanitizer_FILE *_chain; 812 int _fileno; 813 }; 814 # define SANITIZER_HAS_STRUCT_FILE 1 815 #else 816 typedef void __sanitizer_FILE; 817 # define SANITIZER_HAS_STRUCT_FILE 0 818 #endif 819 820 #if SANITIZER_LINUX && !SANITIZER_ANDROID && \ 821 (defined(__i386) || defined(__x86_64) || defined(__mips64) || \ 822 defined(__powerpc64__) || defined(__aarch64__) || defined(__arm__) || \ 823 defined(__s390__) || SANITIZER_RISCV64) 824 extern unsigned struct_user_regs_struct_sz; 825 extern unsigned struct_user_fpregs_struct_sz; 826 extern unsigned struct_user_fpxregs_struct_sz; 827 extern unsigned struct_user_vfpregs_struct_sz; 828 829 extern int ptrace_peektext; 830 extern int ptrace_peekdata; 831 extern int ptrace_peekuser; 832 extern int ptrace_getregs; 833 extern int ptrace_setregs; 834 extern int ptrace_getfpregs; 835 extern int ptrace_setfpregs; 836 extern int ptrace_getfpxregs; 837 extern int ptrace_setfpxregs; 838 extern int ptrace_getvfpregs; 839 extern int ptrace_setvfpregs; 840 extern int ptrace_getsiginfo; 841 extern int ptrace_setsiginfo; 842 extern int ptrace_getregset; 843 extern int ptrace_setregset; 844 extern int ptrace_geteventmsg; 845 #endif 846 847 #if SANITIZER_LINUX && !SANITIZER_ANDROID 848 extern unsigned struct_shminfo_sz; 849 extern unsigned struct_shm_info_sz; 850 extern int shmctl_ipc_stat; 851 extern int shmctl_ipc_info; 852 extern int shmctl_shm_info; 853 extern int shmctl_shm_stat; 854 #endif 855 856 #if !SANITIZER_MAC && !SANITIZER_FREEBSD 857 extern unsigned struct_utmp_sz; 858 #endif 859 #if !SANITIZER_ANDROID 860 extern unsigned struct_utmpx_sz; 861 #endif 862 863 extern int map_fixed; 864 865 // ioctl arguments 866 struct __sanitizer_ifconf { 867 int ifc_len; 868 union { 869 void *ifcu_req; 870 } ifc_ifcu; 871 #if SANITIZER_MAC 872 } __attribute__((packed)); 873 #else 874 }; 875 #endif 876 877 #if SANITIZER_LINUX && !SANITIZER_ANDROID 878 struct __sanitizer__obstack_chunk { 879 char *limit; 880 struct __sanitizer__obstack_chunk *prev; 881 }; 882 883 struct __sanitizer_obstack { 884 long chunk_size; 885 struct __sanitizer__obstack_chunk *chunk; 886 char *object_base; 887 char *next_free; 888 uptr more_fields[7]; 889 }; 890 891 typedef uptr (*__sanitizer_cookie_io_read)(void *cookie, char *buf, uptr size); 892 typedef uptr (*__sanitizer_cookie_io_write)(void *cookie, const char *buf, 893 uptr size); 894 typedef int (*__sanitizer_cookie_io_seek)(void *cookie, u64 *offset, 895 int whence); 896 typedef int (*__sanitizer_cookie_io_close)(void *cookie); 897 898 struct __sanitizer_cookie_io_functions_t { 899 __sanitizer_cookie_io_read read; 900 __sanitizer_cookie_io_write write; 901 __sanitizer_cookie_io_seek seek; 902 __sanitizer_cookie_io_close close; 903 }; 904 #endif 905 906 #define IOC_NRBITS 8 907 #define IOC_TYPEBITS 8 908 #if defined(__powerpc__) || defined(__powerpc64__) || defined(__mips__) || \ 909 defined(__sparc__) 910 #define IOC_SIZEBITS 13 911 #define IOC_DIRBITS 3 912 #define IOC_NONE 1U 913 #define IOC_WRITE 4U 914 #define IOC_READ 2U 915 #else 916 #define IOC_SIZEBITS 14 917 #define IOC_DIRBITS 2 918 #define IOC_NONE 0U 919 #define IOC_WRITE 1U 920 #define IOC_READ 2U 921 #endif 922 #define IOC_NRMASK ((1 << IOC_NRBITS) - 1) 923 #define IOC_TYPEMASK ((1 << IOC_TYPEBITS) - 1) 924 #define IOC_SIZEMASK ((1 << IOC_SIZEBITS) - 1) 925 #if defined(IOC_DIRMASK) 926 #undef IOC_DIRMASK 927 #endif 928 #define IOC_DIRMASK ((1 << IOC_DIRBITS) - 1) 929 #define IOC_NRSHIFT 0 930 #define IOC_TYPESHIFT (IOC_NRSHIFT + IOC_NRBITS) 931 #define IOC_SIZESHIFT (IOC_TYPESHIFT + IOC_TYPEBITS) 932 #define IOC_DIRSHIFT (IOC_SIZESHIFT + IOC_SIZEBITS) 933 #define EVIOC_EV_MAX 0x1f 934 #define EVIOC_ABS_MAX 0x3f 935 936 #define IOC_DIR(nr) (((nr) >> IOC_DIRSHIFT) & IOC_DIRMASK) 937 #define IOC_TYPE(nr) (((nr) >> IOC_TYPESHIFT) & IOC_TYPEMASK) 938 #define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK) 939 940 #if defined(__sparc__) 941 // In sparc the 14 bits SIZE field overlaps with the 942 // least significant bit of DIR, so either IOC_READ or 943 // IOC_WRITE shall be 1 in order to get a non-zero SIZE. 944 #define IOC_SIZE(nr) \ 945 ((((((nr) >> 29) & 0x7) & (4U | 2U)) == 0) ? 0 : (((nr) >> 16) & 0x3fff)) 946 #else 947 #define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK) 948 #endif 949 950 extern unsigned struct_ifreq_sz; 951 extern unsigned struct_termios_sz; 952 extern unsigned struct_winsize_sz; 953 954 #if SANITIZER_LINUX 955 extern unsigned struct_arpreq_sz; 956 extern unsigned struct_cdrom_msf_sz; 957 extern unsigned struct_cdrom_multisession_sz; 958 extern unsigned struct_cdrom_read_audio_sz; 959 extern unsigned struct_cdrom_subchnl_sz; 960 extern unsigned struct_cdrom_ti_sz; 961 extern unsigned struct_cdrom_tocentry_sz; 962 extern unsigned struct_cdrom_tochdr_sz; 963 extern unsigned struct_cdrom_volctrl_sz; 964 extern unsigned struct_ff_effect_sz; 965 extern unsigned struct_floppy_drive_params_sz; 966 extern unsigned struct_floppy_drive_struct_sz; 967 extern unsigned struct_floppy_fdc_state_sz; 968 extern unsigned struct_floppy_max_errors_sz; 969 extern unsigned struct_floppy_raw_cmd_sz; 970 extern unsigned struct_floppy_struct_sz; 971 extern unsigned struct_floppy_write_errors_sz; 972 extern unsigned struct_format_descr_sz; 973 extern unsigned struct_hd_driveid_sz; 974 extern unsigned struct_hd_geometry_sz; 975 extern unsigned struct_input_absinfo_sz; 976 extern unsigned struct_input_id_sz; 977 extern unsigned struct_mtpos_sz; 978 extern unsigned struct_termio_sz; 979 extern unsigned struct_vt_consize_sz; 980 extern unsigned struct_vt_sizes_sz; 981 extern unsigned struct_vt_stat_sz; 982 #endif // SANITIZER_LINUX 983 984 #if SANITIZER_LINUX 985 extern unsigned struct_copr_buffer_sz; 986 extern unsigned struct_copr_debug_buf_sz; 987 extern unsigned struct_copr_msg_sz; 988 extern unsigned struct_midi_info_sz; 989 extern unsigned struct_mtget_sz; 990 extern unsigned struct_mtop_sz; 991 extern unsigned struct_rtentry_sz; 992 extern unsigned struct_sbi_instrument_sz; 993 extern unsigned struct_seq_event_rec_sz; 994 extern unsigned struct_synth_info_sz; 995 extern unsigned struct_vt_mode_sz; 996 #endif // SANITIZER_LINUX 997 998 #if SANITIZER_LINUX && !SANITIZER_ANDROID 999 extern unsigned struct_ax25_parms_struct_sz; 1000 extern unsigned struct_input_keymap_entry_sz; 1001 extern unsigned struct_ipx_config_data_sz; 1002 extern unsigned struct_kbdiacrs_sz; 1003 extern unsigned struct_kbentry_sz; 1004 extern unsigned struct_kbkeycode_sz; 1005 extern unsigned struct_kbsentry_sz; 1006 extern unsigned struct_mtconfiginfo_sz; 1007 extern unsigned struct_nr_parms_struct_sz; 1008 extern unsigned struct_scc_modem_sz; 1009 extern unsigned struct_scc_stat_sz; 1010 extern unsigned struct_serial_multiport_struct_sz; 1011 extern unsigned struct_serial_struct_sz; 1012 extern unsigned struct_sockaddr_ax25_sz; 1013 extern unsigned struct_unimapdesc_sz; 1014 extern unsigned struct_unimapinit_sz; 1015 #endif // SANITIZER_LINUX && !SANITIZER_ANDROID 1016 1017 extern const unsigned long __sanitizer_bufsiz; 1018 1019 #if SANITIZER_LINUX && !SANITIZER_ANDROID 1020 extern unsigned struct_audio_buf_info_sz; 1021 extern unsigned struct_ppp_stats_sz; 1022 #endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID 1023 1024 #if !SANITIZER_ANDROID && !SANITIZER_MAC 1025 extern unsigned struct_sioc_sg_req_sz; 1026 extern unsigned struct_sioc_vif_req_sz; 1027 #endif 1028 1029 // ioctl request identifiers 1030 1031 // A special value to mark ioctls that are not present on the target platform, 1032 // when it can not be determined without including any system headers. 1033 extern const unsigned IOCTL_NOT_PRESENT; 1034 1035 extern unsigned IOCTL_FIOASYNC; 1036 extern unsigned IOCTL_FIOCLEX; 1037 extern unsigned IOCTL_FIOGETOWN; 1038 extern unsigned IOCTL_FIONBIO; 1039 extern unsigned IOCTL_FIONCLEX; 1040 extern unsigned IOCTL_FIOSETOWN; 1041 extern unsigned IOCTL_SIOCADDMULTI; 1042 extern unsigned IOCTL_SIOCATMARK; 1043 extern unsigned IOCTL_SIOCDELMULTI; 1044 extern unsigned IOCTL_SIOCGIFADDR; 1045 extern unsigned IOCTL_SIOCGIFBRDADDR; 1046 extern unsigned IOCTL_SIOCGIFCONF; 1047 extern unsigned IOCTL_SIOCGIFDSTADDR; 1048 extern unsigned IOCTL_SIOCGIFFLAGS; 1049 extern unsigned IOCTL_SIOCGIFMETRIC; 1050 extern unsigned IOCTL_SIOCGIFMTU; 1051 extern unsigned IOCTL_SIOCGIFNETMASK; 1052 extern unsigned IOCTL_SIOCGPGRP; 1053 extern unsigned IOCTL_SIOCSIFADDR; 1054 extern unsigned IOCTL_SIOCSIFBRDADDR; 1055 extern unsigned IOCTL_SIOCSIFDSTADDR; 1056 extern unsigned IOCTL_SIOCSIFFLAGS; 1057 extern unsigned IOCTL_SIOCSIFMETRIC; 1058 extern unsigned IOCTL_SIOCSIFMTU; 1059 extern unsigned IOCTL_SIOCSIFNETMASK; 1060 extern unsigned IOCTL_SIOCSPGRP; 1061 extern unsigned IOCTL_TIOCCONS; 1062 extern unsigned IOCTL_TIOCEXCL; 1063 extern unsigned IOCTL_TIOCGETD; 1064 extern unsigned IOCTL_TIOCGPGRP; 1065 extern unsigned IOCTL_TIOCGWINSZ; 1066 extern unsigned IOCTL_TIOCMBIC; 1067 extern unsigned IOCTL_TIOCMBIS; 1068 extern unsigned IOCTL_TIOCMGET; 1069 extern unsigned IOCTL_TIOCMSET; 1070 extern unsigned IOCTL_TIOCNOTTY; 1071 extern unsigned IOCTL_TIOCNXCL; 1072 extern unsigned IOCTL_TIOCOUTQ; 1073 extern unsigned IOCTL_TIOCPKT; 1074 extern unsigned IOCTL_TIOCSCTTY; 1075 extern unsigned IOCTL_TIOCSETD; 1076 extern unsigned IOCTL_TIOCSPGRP; 1077 extern unsigned IOCTL_TIOCSTI; 1078 extern unsigned IOCTL_TIOCSWINSZ; 1079 #if SANITIZER_LINUX && !SANITIZER_ANDROID 1080 extern unsigned IOCTL_SIOCGETSGCNT; 1081 extern unsigned IOCTL_SIOCGETVIFCNT; 1082 #endif 1083 #if SANITIZER_LINUX 1084 extern unsigned IOCTL_EVIOCGABS; 1085 extern unsigned IOCTL_EVIOCGBIT; 1086 extern unsigned IOCTL_EVIOCGEFFECTS; 1087 extern unsigned IOCTL_EVIOCGID; 1088 extern unsigned IOCTL_EVIOCGKEY; 1089 extern unsigned IOCTL_EVIOCGKEYCODE; 1090 extern unsigned IOCTL_EVIOCGLED; 1091 extern unsigned IOCTL_EVIOCGNAME; 1092 extern unsigned IOCTL_EVIOCGPHYS; 1093 extern unsigned IOCTL_EVIOCGRAB; 1094 extern unsigned IOCTL_EVIOCGREP; 1095 extern unsigned IOCTL_EVIOCGSND; 1096 extern unsigned IOCTL_EVIOCGSW; 1097 extern unsigned IOCTL_EVIOCGUNIQ; 1098 extern unsigned IOCTL_EVIOCGVERSION; 1099 extern unsigned IOCTL_EVIOCRMFF; 1100 extern unsigned IOCTL_EVIOCSABS; 1101 extern unsigned IOCTL_EVIOCSFF; 1102 extern unsigned IOCTL_EVIOCSKEYCODE; 1103 extern unsigned IOCTL_EVIOCSREP; 1104 extern unsigned IOCTL_BLKFLSBUF; 1105 extern unsigned IOCTL_BLKGETSIZE; 1106 extern unsigned IOCTL_BLKRAGET; 1107 extern unsigned IOCTL_BLKRASET; 1108 extern unsigned IOCTL_BLKROGET; 1109 extern unsigned IOCTL_BLKROSET; 1110 extern unsigned IOCTL_BLKRRPART; 1111 extern unsigned IOCTL_CDROMAUDIOBUFSIZ; 1112 extern unsigned IOCTL_CDROMEJECT; 1113 extern unsigned IOCTL_CDROMEJECT_SW; 1114 extern unsigned IOCTL_CDROMMULTISESSION; 1115 extern unsigned IOCTL_CDROMPAUSE; 1116 extern unsigned IOCTL_CDROMPLAYMSF; 1117 extern unsigned IOCTL_CDROMPLAYTRKIND; 1118 extern unsigned IOCTL_CDROMREADAUDIO; 1119 extern unsigned IOCTL_CDROMREADCOOKED; 1120 extern unsigned IOCTL_CDROMREADMODE1; 1121 extern unsigned IOCTL_CDROMREADMODE2; 1122 extern unsigned IOCTL_CDROMREADRAW; 1123 extern unsigned IOCTL_CDROMREADTOCENTRY; 1124 extern unsigned IOCTL_CDROMREADTOCHDR; 1125 extern unsigned IOCTL_CDROMRESET; 1126 extern unsigned IOCTL_CDROMRESUME; 1127 extern unsigned IOCTL_CDROMSEEK; 1128 extern unsigned IOCTL_CDROMSTART; 1129 extern unsigned IOCTL_CDROMSTOP; 1130 extern unsigned IOCTL_CDROMSUBCHNL; 1131 extern unsigned IOCTL_CDROMVOLCTRL; 1132 extern unsigned IOCTL_CDROMVOLREAD; 1133 extern unsigned IOCTL_CDROM_GET_UPC; 1134 extern unsigned IOCTL_FDCLRPRM; 1135 extern unsigned IOCTL_FDDEFPRM; 1136 extern unsigned IOCTL_FDFLUSH; 1137 extern unsigned IOCTL_FDFMTBEG; 1138 extern unsigned IOCTL_FDFMTEND; 1139 extern unsigned IOCTL_FDFMTTRK; 1140 extern unsigned IOCTL_FDGETDRVPRM; 1141 extern unsigned IOCTL_FDGETDRVSTAT; 1142 extern unsigned IOCTL_FDGETDRVTYP; 1143 extern unsigned IOCTL_FDGETFDCSTAT; 1144 extern unsigned IOCTL_FDGETMAXERRS; 1145 extern unsigned IOCTL_FDGETPRM; 1146 extern unsigned IOCTL_FDMSGOFF; 1147 extern unsigned IOCTL_FDMSGON; 1148 extern unsigned IOCTL_FDPOLLDRVSTAT; 1149 extern unsigned IOCTL_FDRAWCMD; 1150 extern unsigned IOCTL_FDRESET; 1151 extern unsigned IOCTL_FDSETDRVPRM; 1152 extern unsigned IOCTL_FDSETEMSGTRESH; 1153 extern unsigned IOCTL_FDSETMAXERRS; 1154 extern unsigned IOCTL_FDSETPRM; 1155 extern unsigned IOCTL_FDTWADDLE; 1156 extern unsigned IOCTL_FDWERRORCLR; 1157 extern unsigned IOCTL_FDWERRORGET; 1158 extern unsigned IOCTL_HDIO_DRIVE_CMD; 1159 extern unsigned IOCTL_HDIO_GETGEO; 1160 extern unsigned IOCTL_HDIO_GET_32BIT; 1161 extern unsigned IOCTL_HDIO_GET_DMA; 1162 extern unsigned IOCTL_HDIO_GET_IDENTITY; 1163 extern unsigned IOCTL_HDIO_GET_KEEPSETTINGS; 1164 extern unsigned IOCTL_HDIO_GET_MULTCOUNT; 1165 extern unsigned IOCTL_HDIO_GET_NOWERR; 1166 extern unsigned IOCTL_HDIO_GET_UNMASKINTR; 1167 extern unsigned IOCTL_HDIO_SET_32BIT; 1168 extern unsigned IOCTL_HDIO_SET_DMA; 1169 extern unsigned IOCTL_HDIO_SET_KEEPSETTINGS; 1170 extern unsigned IOCTL_HDIO_SET_MULTCOUNT; 1171 extern unsigned IOCTL_HDIO_SET_NOWERR; 1172 extern unsigned IOCTL_HDIO_SET_UNMASKINTR; 1173 extern unsigned IOCTL_MTIOCPOS; 1174 extern unsigned IOCTL_PPPIOCGASYNCMAP; 1175 extern unsigned IOCTL_PPPIOCGDEBUG; 1176 extern unsigned IOCTL_PPPIOCGFLAGS; 1177 extern unsigned IOCTL_PPPIOCGUNIT; 1178 extern unsigned IOCTL_PPPIOCGXASYNCMAP; 1179 extern unsigned IOCTL_PPPIOCSASYNCMAP; 1180 extern unsigned IOCTL_PPPIOCSDEBUG; 1181 extern unsigned IOCTL_PPPIOCSFLAGS; 1182 extern unsigned IOCTL_PPPIOCSMAXCID; 1183 extern unsigned IOCTL_PPPIOCSMRU; 1184 extern unsigned IOCTL_PPPIOCSXASYNCMAP; 1185 extern unsigned IOCTL_SIOCDARP; 1186 extern unsigned IOCTL_SIOCDRARP; 1187 extern unsigned IOCTL_SIOCGARP; 1188 extern unsigned IOCTL_SIOCGIFENCAP; 1189 extern unsigned IOCTL_SIOCGIFHWADDR; 1190 extern unsigned IOCTL_SIOCGIFMAP; 1191 extern unsigned IOCTL_SIOCGIFMEM; 1192 extern unsigned IOCTL_SIOCGIFNAME; 1193 extern unsigned IOCTL_SIOCGIFSLAVE; 1194 extern unsigned IOCTL_SIOCGRARP; 1195 extern unsigned IOCTL_SIOCGSTAMP; 1196 extern unsigned IOCTL_SIOCSARP; 1197 extern unsigned IOCTL_SIOCSIFENCAP; 1198 extern unsigned IOCTL_SIOCSIFHWADDR; 1199 extern unsigned IOCTL_SIOCSIFLINK; 1200 extern unsigned IOCTL_SIOCSIFMAP; 1201 extern unsigned IOCTL_SIOCSIFMEM; 1202 extern unsigned IOCTL_SIOCSIFSLAVE; 1203 extern unsigned IOCTL_SIOCSRARP; 1204 extern unsigned IOCTL_SNDCTL_COPR_HALT; 1205 extern unsigned IOCTL_SNDCTL_COPR_LOAD; 1206 extern unsigned IOCTL_SNDCTL_COPR_RCODE; 1207 extern unsigned IOCTL_SNDCTL_COPR_RCVMSG; 1208 extern unsigned IOCTL_SNDCTL_COPR_RDATA; 1209 extern unsigned IOCTL_SNDCTL_COPR_RESET; 1210 extern unsigned IOCTL_SNDCTL_COPR_RUN; 1211 extern unsigned IOCTL_SNDCTL_COPR_SENDMSG; 1212 extern unsigned IOCTL_SNDCTL_COPR_WCODE; 1213 extern unsigned IOCTL_SNDCTL_COPR_WDATA; 1214 extern unsigned IOCTL_TCFLSH; 1215 extern unsigned IOCTL_TCGETA; 1216 extern unsigned IOCTL_TCGETS; 1217 extern unsigned IOCTL_TCSBRK; 1218 extern unsigned IOCTL_TCSBRKP; 1219 extern unsigned IOCTL_TCSETA; 1220 extern unsigned IOCTL_TCSETAF; 1221 extern unsigned IOCTL_TCSETAW; 1222 extern unsigned IOCTL_TCSETS; 1223 extern unsigned IOCTL_TCSETSF; 1224 extern unsigned IOCTL_TCSETSW; 1225 extern unsigned IOCTL_TCXONC; 1226 extern unsigned IOCTL_TIOCGLCKTRMIOS; 1227 extern unsigned IOCTL_TIOCGSOFTCAR; 1228 extern unsigned IOCTL_TIOCINQ; 1229 extern unsigned IOCTL_TIOCLINUX; 1230 extern unsigned IOCTL_TIOCSERCONFIG; 1231 extern unsigned IOCTL_TIOCSERGETLSR; 1232 extern unsigned IOCTL_TIOCSERGWILD; 1233 extern unsigned IOCTL_TIOCSERSWILD; 1234 extern unsigned IOCTL_TIOCSLCKTRMIOS; 1235 extern unsigned IOCTL_TIOCSSOFTCAR; 1236 extern unsigned IOCTL_VT_DISALLOCATE; 1237 extern unsigned IOCTL_VT_GETSTATE; 1238 extern unsigned IOCTL_VT_RESIZE; 1239 extern unsigned IOCTL_VT_RESIZEX; 1240 extern unsigned IOCTL_VT_SENDSIG; 1241 extern unsigned IOCTL_MTIOCGET; 1242 extern unsigned IOCTL_MTIOCTOP; 1243 extern unsigned IOCTL_SIOCADDRT; 1244 extern unsigned IOCTL_SIOCDELRT; 1245 extern unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE; 1246 extern unsigned IOCTL_SNDCTL_DSP_GETFMTS; 1247 extern unsigned IOCTL_SNDCTL_DSP_NONBLOCK; 1248 extern unsigned IOCTL_SNDCTL_DSP_POST; 1249 extern unsigned IOCTL_SNDCTL_DSP_RESET; 1250 extern unsigned IOCTL_SNDCTL_DSP_SETFMT; 1251 extern unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT; 1252 extern unsigned IOCTL_SNDCTL_DSP_SPEED; 1253 extern unsigned IOCTL_SNDCTL_DSP_STEREO; 1254 extern unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE; 1255 extern unsigned IOCTL_SNDCTL_DSP_SYNC; 1256 extern unsigned IOCTL_SNDCTL_FM_4OP_ENABLE; 1257 extern unsigned IOCTL_SNDCTL_FM_LOAD_INSTR; 1258 extern unsigned IOCTL_SNDCTL_MIDI_INFO; 1259 extern unsigned IOCTL_SNDCTL_MIDI_PRETIME; 1260 extern unsigned IOCTL_SNDCTL_SEQ_CTRLRATE; 1261 extern unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT; 1262 extern unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT; 1263 extern unsigned IOCTL_SNDCTL_SEQ_NRMIDIS; 1264 extern unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS; 1265 extern unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND; 1266 extern unsigned IOCTL_SNDCTL_SEQ_PANIC; 1267 extern unsigned IOCTL_SNDCTL_SEQ_PERCMODE; 1268 extern unsigned IOCTL_SNDCTL_SEQ_RESET; 1269 extern unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES; 1270 extern unsigned IOCTL_SNDCTL_SEQ_SYNC; 1271 extern unsigned IOCTL_SNDCTL_SEQ_TESTMIDI; 1272 extern unsigned IOCTL_SNDCTL_SEQ_THRESHOLD; 1273 extern unsigned IOCTL_SNDCTL_SYNTH_INFO; 1274 extern unsigned IOCTL_SNDCTL_SYNTH_MEMAVL; 1275 extern unsigned IOCTL_SNDCTL_TMR_CONTINUE; 1276 extern unsigned IOCTL_SNDCTL_TMR_METRONOME; 1277 extern unsigned IOCTL_SNDCTL_TMR_SELECT; 1278 extern unsigned IOCTL_SNDCTL_TMR_SOURCE; 1279 extern unsigned IOCTL_SNDCTL_TMR_START; 1280 extern unsigned IOCTL_SNDCTL_TMR_STOP; 1281 extern unsigned IOCTL_SNDCTL_TMR_TEMPO; 1282 extern unsigned IOCTL_SNDCTL_TMR_TIMEBASE; 1283 extern unsigned IOCTL_SOUND_MIXER_READ_ALTPCM; 1284 extern unsigned IOCTL_SOUND_MIXER_READ_BASS; 1285 extern unsigned IOCTL_SOUND_MIXER_READ_CAPS; 1286 extern unsigned IOCTL_SOUND_MIXER_READ_CD; 1287 extern unsigned IOCTL_SOUND_MIXER_READ_DEVMASK; 1288 extern unsigned IOCTL_SOUND_MIXER_READ_ENHANCE; 1289 extern unsigned IOCTL_SOUND_MIXER_READ_IGAIN; 1290 extern unsigned IOCTL_SOUND_MIXER_READ_IMIX; 1291 extern unsigned IOCTL_SOUND_MIXER_READ_LINE1; 1292 extern unsigned IOCTL_SOUND_MIXER_READ_LINE2; 1293 extern unsigned IOCTL_SOUND_MIXER_READ_LINE3; 1294 extern unsigned IOCTL_SOUND_MIXER_READ_LINE; 1295 extern unsigned IOCTL_SOUND_MIXER_READ_LOUD; 1296 extern unsigned IOCTL_SOUND_MIXER_READ_MIC; 1297 extern unsigned IOCTL_SOUND_MIXER_READ_MUTE; 1298 extern unsigned IOCTL_SOUND_MIXER_READ_OGAIN; 1299 extern unsigned IOCTL_SOUND_MIXER_READ_PCM; 1300 extern unsigned IOCTL_SOUND_MIXER_READ_RECLEV; 1301 extern unsigned IOCTL_SOUND_MIXER_READ_RECMASK; 1302 extern unsigned IOCTL_SOUND_MIXER_READ_RECSRC; 1303 extern unsigned IOCTL_SOUND_MIXER_READ_SPEAKER; 1304 extern unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS; 1305 extern unsigned IOCTL_SOUND_MIXER_READ_SYNTH; 1306 extern unsigned IOCTL_SOUND_MIXER_READ_TREBLE; 1307 extern unsigned IOCTL_SOUND_MIXER_READ_VOLUME; 1308 extern unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM; 1309 extern unsigned IOCTL_SOUND_MIXER_WRITE_BASS; 1310 extern unsigned IOCTL_SOUND_MIXER_WRITE_CD; 1311 extern unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE; 1312 extern unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN; 1313 extern unsigned IOCTL_SOUND_MIXER_WRITE_IMIX; 1314 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE1; 1315 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE2; 1316 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE3; 1317 extern unsigned IOCTL_SOUND_MIXER_WRITE_LINE; 1318 extern unsigned IOCTL_SOUND_MIXER_WRITE_LOUD; 1319 extern unsigned IOCTL_SOUND_MIXER_WRITE_MIC; 1320 extern unsigned IOCTL_SOUND_MIXER_WRITE_MUTE; 1321 extern unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN; 1322 extern unsigned IOCTL_SOUND_MIXER_WRITE_PCM; 1323 extern unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV; 1324 extern unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC; 1325 extern unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER; 1326 extern unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH; 1327 extern unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE; 1328 extern unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME; 1329 extern unsigned IOCTL_SOUND_PCM_READ_BITS; 1330 extern unsigned IOCTL_SOUND_PCM_READ_CHANNELS; 1331 extern unsigned IOCTL_SOUND_PCM_READ_FILTER; 1332 extern unsigned IOCTL_SOUND_PCM_READ_RATE; 1333 extern unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS; 1334 extern unsigned IOCTL_SOUND_PCM_WRITE_FILTER; 1335 extern unsigned IOCTL_VT_ACTIVATE; 1336 extern unsigned IOCTL_VT_GETMODE; 1337 extern unsigned IOCTL_VT_OPENQRY; 1338 extern unsigned IOCTL_VT_RELDISP; 1339 extern unsigned IOCTL_VT_SETMODE; 1340 extern unsigned IOCTL_VT_WAITACTIVE; 1341 #endif // SANITIZER_LINUX 1342 1343 #if SANITIZER_LINUX && !SANITIZER_ANDROID 1344 extern unsigned IOCTL_EQL_EMANCIPATE; 1345 extern unsigned IOCTL_EQL_ENSLAVE; 1346 extern unsigned IOCTL_EQL_GETMASTRCFG; 1347 extern unsigned IOCTL_EQL_GETSLAVECFG; 1348 extern unsigned IOCTL_EQL_SETMASTRCFG; 1349 extern unsigned IOCTL_EQL_SETSLAVECFG; 1350 extern unsigned IOCTL_EVIOCGKEYCODE_V2; 1351 extern unsigned IOCTL_EVIOCGPROP; 1352 extern unsigned IOCTL_EVIOCSKEYCODE_V2; 1353 extern unsigned IOCTL_FS_IOC_GETFLAGS; 1354 extern unsigned IOCTL_FS_IOC_GETVERSION; 1355 extern unsigned IOCTL_FS_IOC_SETFLAGS; 1356 extern unsigned IOCTL_FS_IOC_SETVERSION; 1357 extern unsigned IOCTL_GIO_CMAP; 1358 extern unsigned IOCTL_GIO_FONT; 1359 extern unsigned IOCTL_GIO_UNIMAP; 1360 extern unsigned IOCTL_GIO_UNISCRNMAP; 1361 extern unsigned IOCTL_KDADDIO; 1362 extern unsigned IOCTL_KDDELIO; 1363 extern unsigned IOCTL_KDGETKEYCODE; 1364 extern unsigned IOCTL_KDGKBDIACR; 1365 extern unsigned IOCTL_KDGKBENT; 1366 extern unsigned IOCTL_KDGKBLED; 1367 extern unsigned IOCTL_KDGKBMETA; 1368 extern unsigned IOCTL_KDGKBSENT; 1369 extern unsigned IOCTL_KDMAPDISP; 1370 extern unsigned IOCTL_KDSETKEYCODE; 1371 extern unsigned IOCTL_KDSIGACCEPT; 1372 extern unsigned IOCTL_KDSKBDIACR; 1373 extern unsigned IOCTL_KDSKBENT; 1374 extern unsigned IOCTL_KDSKBLED; 1375 extern unsigned IOCTL_KDSKBMETA; 1376 extern unsigned IOCTL_KDSKBSENT; 1377 extern unsigned IOCTL_KDUNMAPDISP; 1378 extern unsigned IOCTL_LPABORT; 1379 extern unsigned IOCTL_LPABORTOPEN; 1380 extern unsigned IOCTL_LPCAREFUL; 1381 extern unsigned IOCTL_LPCHAR; 1382 extern unsigned IOCTL_LPGETIRQ; 1383 extern unsigned IOCTL_LPGETSTATUS; 1384 extern unsigned IOCTL_LPRESET; 1385 extern unsigned IOCTL_LPSETIRQ; 1386 extern unsigned IOCTL_LPTIME; 1387 extern unsigned IOCTL_LPWAIT; 1388 extern unsigned IOCTL_MTIOCGETCONFIG; 1389 extern unsigned IOCTL_MTIOCSETCONFIG; 1390 extern unsigned IOCTL_PIO_CMAP; 1391 extern unsigned IOCTL_PIO_FONT; 1392 extern unsigned IOCTL_PIO_UNIMAP; 1393 extern unsigned IOCTL_PIO_UNIMAPCLR; 1394 extern unsigned IOCTL_PIO_UNISCRNMAP; 1395 extern unsigned IOCTL_SCSI_IOCTL_GET_IDLUN; 1396 extern unsigned IOCTL_SCSI_IOCTL_PROBE_HOST; 1397 extern unsigned IOCTL_SCSI_IOCTL_TAGGED_DISABLE; 1398 extern unsigned IOCTL_SCSI_IOCTL_TAGGED_ENABLE; 1399 extern unsigned IOCTL_SIOCAIPXITFCRT; 1400 extern unsigned IOCTL_SIOCAIPXPRISLT; 1401 extern unsigned IOCTL_SIOCAX25ADDUID; 1402 extern unsigned IOCTL_SIOCAX25DELUID; 1403 extern unsigned IOCTL_SIOCAX25GETPARMS; 1404 extern unsigned IOCTL_SIOCAX25GETUID; 1405 extern unsigned IOCTL_SIOCAX25NOUID; 1406 extern unsigned IOCTL_SIOCAX25SETPARMS; 1407 extern unsigned IOCTL_SIOCDEVPLIP; 1408 extern unsigned IOCTL_SIOCIPXCFGDATA; 1409 extern unsigned IOCTL_SIOCNRDECOBS; 1410 extern unsigned IOCTL_SIOCNRGETPARMS; 1411 extern unsigned IOCTL_SIOCNRRTCTL; 1412 extern unsigned IOCTL_SIOCNRSETPARMS; 1413 extern unsigned IOCTL_SNDCTL_DSP_GETISPACE; 1414 extern unsigned IOCTL_SNDCTL_DSP_GETOSPACE; 1415 extern unsigned IOCTL_TIOCGSERIAL; 1416 extern unsigned IOCTL_TIOCSERGETMULTI; 1417 extern unsigned IOCTL_TIOCSERSETMULTI; 1418 extern unsigned IOCTL_TIOCSSERIAL; 1419 extern unsigned IOCTL_GIO_SCRNMAP; 1420 extern unsigned IOCTL_KDDISABIO; 1421 extern unsigned IOCTL_KDENABIO; 1422 extern unsigned IOCTL_KDGETLED; 1423 extern unsigned IOCTL_KDGETMODE; 1424 extern unsigned IOCTL_KDGKBMODE; 1425 extern unsigned IOCTL_KDGKBTYPE; 1426 extern unsigned IOCTL_KDMKTONE; 1427 extern unsigned IOCTL_KDSETLED; 1428 extern unsigned IOCTL_KDSETMODE; 1429 extern unsigned IOCTL_KDSKBMODE; 1430 extern unsigned IOCTL_KIOCSOUND; 1431 extern unsigned IOCTL_PIO_SCRNMAP; 1432 #endif 1433 1434 extern const int si_SEGV_MAPERR; 1435 extern const int si_SEGV_ACCERR; 1436 } // namespace __sanitizer 1437 1438 #define CHECK_TYPE_SIZE(TYPE) \ 1439 COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE)) 1440 1441 #define CHECK_SIZE_AND_OFFSET(CLASS, MEMBER) \ 1442 COMPILER_CHECK(sizeof(((__sanitizer_##CLASS *)NULL)->MEMBER) == \ 1443 sizeof(((CLASS *)NULL)->MEMBER)); \ 1444 COMPILER_CHECK(offsetof(__sanitizer_##CLASS, MEMBER) == \ 1445 offsetof(CLASS, MEMBER)) 1446 1447 // For sigaction, which is a function and struct at the same time, 1448 // and thus requires explicit "struct" in sizeof() expression. 1449 #define CHECK_STRUCT_SIZE_AND_OFFSET(CLASS, MEMBER) \ 1450 COMPILER_CHECK(sizeof(((struct __sanitizer_##CLASS *)NULL)->MEMBER) == \ 1451 sizeof(((struct CLASS *)NULL)->MEMBER)); \ 1452 COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) == \ 1453 offsetof(struct CLASS, MEMBER)) 1454 1455 #define SIGACTION_SYMNAME sigaction 1456 1457 #endif // SANITIZER_LINUX || SANITIZER_MAC 1458 1459 #endif 1460