Home | History | Annotate | Line # | Download | only in sanitizer_common
      1 //===-- sanitizer_platform_limits_freebsd.cc ------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file is a part of Sanitizer common code.
     11 //
     12 // Sizes and layouts of platform-specific FreeBSD data structures.
     13 //===----------------------------------------------------------------------===//
     14 
     15 #include "sanitizer_platform.h"
     16 
     17 #if SANITIZER_FREEBSD
     18 
     19 #include <arpa/inet.h>
     20 #include <dirent.h>
     21 #include <fts.h>
     22 #include <fstab.h>
     23 #include <grp.h>
     24 #include <limits.h>
     25 #include <net/if.h>
     26 #include <netdb.h>
     27 #include <poll.h>
     28 #include <pthread.h>
     29 #include <pwd.h>
     30 #include <regex.h>
     31 #include <signal.h>
     32 #include <stddef.h>
     33 #include <sys/mman.h>
     34 #include <sys/capsicum.h>
     35 #include <sys/resource.h>
     36 #include <sys/stat.h>
     37 #include <sys/time.h>
     38 #include <sys/times.h>
     39 #include <sys/types.h>
     40 #include <sys/utsname.h>
     41 #include <termios.h>
     42 #include <time.h>
     43 
     44 #include <net/route.h>
     45 #include <sys/mount.h>
     46 #include <sys/sockio.h>
     47 #include <sys/socket.h>
     48 #include <sys/filio.h>
     49 #include <sys/signal.h>
     50 #include <sys/timespec.h>
     51 #include <sys/timeb.h>
     52 #include <sys/mqueue.h>
     53 #include <sys/msg.h>
     54 #include <sys/ipc.h>
     55 #include <sys/msg.h>
     56 #include <sys/statvfs.h>
     57 #include <sys/soundcard.h>
     58 #include <sys/mtio.h>
     59 #include <sys/consio.h>
     60 #include <sys/kbio.h>
     61 #include <sys/link_elf.h>
     62 #include <netinet/ip_mroute.h>
     63 #include <netinet/in.h>
     64 #include <net/ethernet.h>
     65 #include <net/ppp_defs.h>
     66 #include <glob.h>
     67 #include <stdio.h>
     68 #include <term.h>
     69 #include <utmpx.h>
     70 #include <wchar.h>
     71 #include <vis.h>
     72 
     73 #define _KERNEL  // to declare 'shminfo' structure
     74 # include <sys/shm.h>
     75 #undef _KERNEL
     76 
     77 #undef INLINE  // to avoid clashes with sanitizers' definitions
     78 
     79 #undef IOC_DIRMASK
     80 
     81 # include <utime.h>
     82 # include <sys/ptrace.h>
     83 # include <semaphore.h>
     84 
     85 #include <ifaddrs.h>
     86 #include <sys/ucontext.h>
     87 #include <wordexp.h>
     88 
     89 // Include these after system headers to avoid name clashes and ambiguities.
     90 #include "sanitizer_internal_defs.h"
     91 #include "sanitizer_platform_limits_freebsd.h"
     92 
     93 namespace __sanitizer {
     94   unsigned struct_cap_rights_sz = sizeof(cap_rights_t);
     95   unsigned struct_utsname_sz = sizeof(struct utsname);
     96   unsigned struct_stat_sz = sizeof(struct stat);
     97   unsigned struct_rusage_sz = sizeof(struct rusage);
     98   unsigned struct_tm_sz = sizeof(struct tm);
     99   unsigned struct_passwd_sz = sizeof(struct passwd);
    100   unsigned struct_group_sz = sizeof(struct group);
    101   unsigned siginfo_t_sz = sizeof(siginfo_t);
    102   unsigned struct_sigaction_sz = sizeof(struct sigaction);
    103   unsigned struct_itimerval_sz = sizeof(struct itimerval);
    104   unsigned pthread_t_sz = sizeof(pthread_t);
    105   unsigned pthread_mutex_t_sz = sizeof(pthread_mutex_t);
    106   unsigned pthread_cond_t_sz = sizeof(pthread_cond_t);
    107   unsigned pid_t_sz = sizeof(pid_t);
    108   unsigned timeval_sz = sizeof(timeval);
    109   unsigned uid_t_sz = sizeof(uid_t);
    110   unsigned gid_t_sz = sizeof(gid_t);
    111   unsigned fpos_t_sz = sizeof(fpos_t);
    112   unsigned mbstate_t_sz = sizeof(mbstate_t);
    113   unsigned sigset_t_sz = sizeof(sigset_t);
    114   unsigned struct_timezone_sz = sizeof(struct timezone);
    115   unsigned struct_tms_sz = sizeof(struct tms);
    116   unsigned struct_sigevent_sz = sizeof(struct sigevent);
    117   unsigned struct_sched_param_sz = sizeof(struct sched_param);
    118   unsigned struct_statfs_sz = sizeof(struct statfs);
    119   unsigned struct_sockaddr_sz = sizeof(struct sockaddr);
    120   unsigned ucontext_t_sz = sizeof(ucontext_t);
    121   unsigned struct_rlimit_sz = sizeof(struct rlimit);
    122   unsigned struct_timespec_sz = sizeof(struct timespec);
    123   unsigned struct_utimbuf_sz = sizeof(struct utimbuf);
    124   unsigned struct_itimerspec_sz = sizeof(struct itimerspec);
    125   unsigned struct_timeb_sz = sizeof(struct timeb);
    126   unsigned struct_msqid_ds_sz = sizeof(struct msqid_ds);
    127   unsigned struct_mq_attr_sz = sizeof(struct mq_attr);
    128   unsigned struct_statvfs_sz = sizeof(struct statvfs);
    129   unsigned struct_shminfo_sz = sizeof(struct shminfo);
    130   unsigned struct_shm_info_sz = sizeof(struct shm_info);
    131   unsigned struct_regmatch_sz = sizeof(regmatch_t);
    132   unsigned struct_regex_sz = sizeof(regex_t);
    133   unsigned struct_fstab_sz = sizeof(struct fstab);
    134   unsigned struct_FTS_sz = sizeof(FTS);
    135   unsigned struct_FTSENT_sz = sizeof(FTSENT);
    136 
    137   const uptr sig_ign = (uptr)SIG_IGN;
    138   const uptr sig_dfl = (uptr)SIG_DFL;
    139   const uptr sig_err = (uptr)SIG_ERR;
    140   const uptr sa_siginfo = (uptr)SA_SIGINFO;
    141 
    142   int shmctl_ipc_stat = (int)IPC_STAT;
    143   int shmctl_ipc_info = (int)IPC_INFO;
    144   int shmctl_shm_info = (int)SHM_INFO;
    145   int shmctl_shm_stat = (int)SHM_STAT;
    146   unsigned struct_utmpx_sz = sizeof(struct utmpx);
    147 
    148   int map_fixed = MAP_FIXED;
    149 
    150   int af_inet = (int)AF_INET;
    151   int af_inet6 = (int)AF_INET6;
    152 
    153   uptr __sanitizer_in_addr_sz(int af) {
    154     if (af == AF_INET)
    155       return sizeof(struct in_addr);
    156     else if (af == AF_INET6)
    157       return sizeof(struct in6_addr);
    158     else
    159       return 0;
    160   }
    161 
    162   unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
    163   int glob_nomatch = GLOB_NOMATCH;
    164   int glob_altdirfunc = GLOB_ALTDIRFUNC;
    165 
    166   unsigned path_max = PATH_MAX;
    167 
    168   // ioctl arguments
    169   unsigned struct_ifreq_sz = sizeof(struct ifreq);
    170   unsigned struct_termios_sz = sizeof(struct termios);
    171   unsigned struct_winsize_sz = sizeof(struct winsize);
    172 #if SOUND_VERSION >= 0x040000
    173   unsigned struct_copr_buffer_sz = 0;
    174   unsigned struct_copr_debug_buf_sz = 0;
    175   unsigned struct_copr_msg_sz = 0;
    176 #else
    177   unsigned struct_copr_buffer_sz = sizeof(struct copr_buffer);
    178   unsigned struct_copr_debug_buf_sz = sizeof(struct copr_debug_buf);
    179   unsigned struct_copr_msg_sz = sizeof(struct copr_msg);
    180 #endif
    181   unsigned struct_midi_info_sz = sizeof(struct midi_info);
    182   unsigned struct_mtget_sz = sizeof(struct mtget);
    183   unsigned struct_mtop_sz = sizeof(struct mtop);
    184   unsigned struct_sbi_instrument_sz = sizeof(struct sbi_instrument);
    185   unsigned struct_seq_event_rec_sz = sizeof(struct seq_event_rec);
    186   unsigned struct_synth_info_sz = sizeof(struct synth_info);
    187   unsigned struct_audio_buf_info_sz = sizeof(struct audio_buf_info);
    188   unsigned struct_ppp_stats_sz = sizeof(struct ppp_stats);
    189   unsigned struct_sioc_sg_req_sz = sizeof(struct sioc_sg_req);
    190   unsigned struct_sioc_vif_req_sz = sizeof(struct sioc_vif_req);
    191   const unsigned long __sanitizer_bufsiz = BUFSIZ;
    192 
    193   const unsigned IOCTL_NOT_PRESENT = 0;
    194 
    195   unsigned IOCTL_FIOASYNC = FIOASYNC;
    196   unsigned IOCTL_FIOCLEX = FIOCLEX;
    197   unsigned IOCTL_FIOGETOWN = FIOGETOWN;
    198   unsigned IOCTL_FIONBIO = FIONBIO;
    199   unsigned IOCTL_FIONCLEX = FIONCLEX;
    200   unsigned IOCTL_FIOSETOWN = FIOSETOWN;
    201   unsigned IOCTL_SIOCADDMULTI = SIOCADDMULTI;
    202   unsigned IOCTL_SIOCATMARK = SIOCATMARK;
    203   unsigned IOCTL_SIOCDELMULTI = SIOCDELMULTI;
    204   unsigned IOCTL_SIOCGIFADDR = SIOCGIFADDR;
    205   unsigned IOCTL_SIOCGIFBRDADDR = SIOCGIFBRDADDR;
    206   unsigned IOCTL_SIOCGIFCONF = SIOCGIFCONF;
    207   unsigned IOCTL_SIOCGIFDSTADDR = SIOCGIFDSTADDR;
    208   unsigned IOCTL_SIOCGIFFLAGS = SIOCGIFFLAGS;
    209   unsigned IOCTL_SIOCGIFMETRIC = SIOCGIFMETRIC;
    210   unsigned IOCTL_SIOCGIFMTU = SIOCGIFMTU;
    211   unsigned IOCTL_SIOCGIFNETMASK = SIOCGIFNETMASK;
    212   unsigned IOCTL_SIOCGPGRP = SIOCGPGRP;
    213   unsigned IOCTL_SIOCSIFADDR = SIOCSIFADDR;
    214   unsigned IOCTL_SIOCSIFBRDADDR = SIOCSIFBRDADDR;
    215   unsigned IOCTL_SIOCSIFDSTADDR = SIOCSIFDSTADDR;
    216   unsigned IOCTL_SIOCSIFFLAGS = SIOCSIFFLAGS;
    217   unsigned IOCTL_SIOCSIFMETRIC = SIOCSIFMETRIC;
    218   unsigned IOCTL_SIOCSIFMTU = SIOCSIFMTU;
    219   unsigned IOCTL_SIOCSIFNETMASK = SIOCSIFNETMASK;
    220   unsigned IOCTL_SIOCSPGRP = SIOCSPGRP;
    221   unsigned IOCTL_TIOCCONS = TIOCCONS;
    222   unsigned IOCTL_TIOCEXCL = TIOCEXCL;
    223   unsigned IOCTL_TIOCGETD = TIOCGETD;
    224   unsigned IOCTL_TIOCGPGRP = TIOCGPGRP;
    225   unsigned IOCTL_TIOCGWINSZ = TIOCGWINSZ;
    226   unsigned IOCTL_TIOCMBIC = TIOCMBIC;
    227   unsigned IOCTL_TIOCMBIS = TIOCMBIS;
    228   unsigned IOCTL_TIOCMGET = TIOCMGET;
    229   unsigned IOCTL_TIOCMSET = TIOCMSET;
    230   unsigned IOCTL_TIOCNOTTY = TIOCNOTTY;
    231   unsigned IOCTL_TIOCNXCL = TIOCNXCL;
    232   unsigned IOCTL_TIOCOUTQ = TIOCOUTQ;
    233   unsigned IOCTL_TIOCPKT = TIOCPKT;
    234   unsigned IOCTL_TIOCSCTTY = TIOCSCTTY;
    235   unsigned IOCTL_TIOCSETD = TIOCSETD;
    236   unsigned IOCTL_TIOCSPGRP = TIOCSPGRP;
    237   unsigned IOCTL_TIOCSTI = TIOCSTI;
    238   unsigned IOCTL_TIOCSWINSZ = TIOCSWINSZ;
    239   unsigned IOCTL_SIOCGETSGCNT = SIOCGETSGCNT;
    240   unsigned IOCTL_SIOCGETVIFCNT = SIOCGETVIFCNT;
    241   unsigned IOCTL_MTIOCGET = MTIOCGET;
    242   unsigned IOCTL_MTIOCTOP = MTIOCTOP;
    243   unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE = SNDCTL_DSP_GETBLKSIZE;
    244   unsigned IOCTL_SNDCTL_DSP_GETFMTS = SNDCTL_DSP_GETFMTS;
    245   unsigned IOCTL_SNDCTL_DSP_NONBLOCK = SNDCTL_DSP_NONBLOCK;
    246   unsigned IOCTL_SNDCTL_DSP_POST = SNDCTL_DSP_POST;
    247   unsigned IOCTL_SNDCTL_DSP_RESET = SNDCTL_DSP_RESET;
    248   unsigned IOCTL_SNDCTL_DSP_SETFMT = SNDCTL_DSP_SETFMT;
    249   unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT = SNDCTL_DSP_SETFRAGMENT;
    250   unsigned IOCTL_SNDCTL_DSP_SPEED = SNDCTL_DSP_SPEED;
    251   unsigned IOCTL_SNDCTL_DSP_STEREO = SNDCTL_DSP_STEREO;
    252   unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE = SNDCTL_DSP_SUBDIVIDE;
    253   unsigned IOCTL_SNDCTL_DSP_SYNC = SNDCTL_DSP_SYNC;
    254   unsigned IOCTL_SNDCTL_FM_4OP_ENABLE = SNDCTL_FM_4OP_ENABLE;
    255   unsigned IOCTL_SNDCTL_FM_LOAD_INSTR = SNDCTL_FM_LOAD_INSTR;
    256   unsigned IOCTL_SNDCTL_MIDI_INFO = SNDCTL_MIDI_INFO;
    257   unsigned IOCTL_SNDCTL_MIDI_PRETIME = SNDCTL_MIDI_PRETIME;
    258   unsigned IOCTL_SNDCTL_SEQ_CTRLRATE = SNDCTL_SEQ_CTRLRATE;
    259   unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT = SNDCTL_SEQ_GETINCOUNT;
    260   unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT = SNDCTL_SEQ_GETOUTCOUNT;
    261   unsigned IOCTL_SNDCTL_SEQ_NRMIDIS = SNDCTL_SEQ_NRMIDIS;
    262   unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS = SNDCTL_SEQ_NRSYNTHS;
    263   unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND = SNDCTL_SEQ_OUTOFBAND;
    264   unsigned IOCTL_SNDCTL_SEQ_PANIC = SNDCTL_SEQ_PANIC;
    265   unsigned IOCTL_SNDCTL_SEQ_PERCMODE = SNDCTL_SEQ_PERCMODE;
    266   unsigned IOCTL_SNDCTL_SEQ_RESET = SNDCTL_SEQ_RESET;
    267   unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES = SNDCTL_SEQ_RESETSAMPLES;
    268   unsigned IOCTL_SNDCTL_SEQ_SYNC = SNDCTL_SEQ_SYNC;
    269   unsigned IOCTL_SNDCTL_SEQ_TESTMIDI = SNDCTL_SEQ_TESTMIDI;
    270   unsigned IOCTL_SNDCTL_SEQ_THRESHOLD = SNDCTL_SEQ_THRESHOLD;
    271   unsigned IOCTL_SNDCTL_SYNTH_INFO = SNDCTL_SYNTH_INFO;
    272   unsigned IOCTL_SNDCTL_SYNTH_MEMAVL = SNDCTL_SYNTH_MEMAVL;
    273   unsigned IOCTL_SNDCTL_TMR_CONTINUE = SNDCTL_TMR_CONTINUE;
    274   unsigned IOCTL_SNDCTL_TMR_METRONOME = SNDCTL_TMR_METRONOME;
    275   unsigned IOCTL_SNDCTL_TMR_SELECT = SNDCTL_TMR_SELECT;
    276   unsigned IOCTL_SNDCTL_TMR_SOURCE = SNDCTL_TMR_SOURCE;
    277   unsigned IOCTL_SNDCTL_TMR_START = SNDCTL_TMR_START;
    278   unsigned IOCTL_SNDCTL_TMR_STOP = SNDCTL_TMR_STOP;
    279   unsigned IOCTL_SNDCTL_TMR_TEMPO = SNDCTL_TMR_TEMPO;
    280   unsigned IOCTL_SNDCTL_TMR_TIMEBASE = SNDCTL_TMR_TIMEBASE;
    281   unsigned IOCTL_SOUND_MIXER_READ_ALTPCM = SOUND_MIXER_READ_ALTPCM;
    282   unsigned IOCTL_SOUND_MIXER_READ_BASS = SOUND_MIXER_READ_BASS;
    283   unsigned IOCTL_SOUND_MIXER_READ_CAPS = SOUND_MIXER_READ_CAPS;
    284   unsigned IOCTL_SOUND_MIXER_READ_CD = SOUND_MIXER_READ_CD;
    285   unsigned IOCTL_SOUND_MIXER_READ_DEVMASK = SOUND_MIXER_READ_DEVMASK;
    286   unsigned IOCTL_SOUND_MIXER_READ_ENHANCE = SOUND_MIXER_READ_ENHANCE;
    287   unsigned IOCTL_SOUND_MIXER_READ_IGAIN = SOUND_MIXER_READ_IGAIN;
    288   unsigned IOCTL_SOUND_MIXER_READ_IMIX = SOUND_MIXER_READ_IMIX;
    289   unsigned IOCTL_SOUND_MIXER_READ_LINE = SOUND_MIXER_READ_LINE;
    290   unsigned IOCTL_SOUND_MIXER_READ_LINE1 = SOUND_MIXER_READ_LINE1;
    291   unsigned IOCTL_SOUND_MIXER_READ_LINE2 = SOUND_MIXER_READ_LINE2;
    292   unsigned IOCTL_SOUND_MIXER_READ_LINE3 = SOUND_MIXER_READ_LINE3;
    293   unsigned IOCTL_SOUND_MIXER_READ_LOUD = SOUND_MIXER_READ_LOUD;
    294   unsigned IOCTL_SOUND_MIXER_READ_MIC = SOUND_MIXER_READ_MIC;
    295   unsigned IOCTL_SOUND_MIXER_READ_MUTE = SOUND_MIXER_READ_MUTE;
    296   unsigned IOCTL_SOUND_MIXER_READ_OGAIN = SOUND_MIXER_READ_OGAIN;
    297   unsigned IOCTL_SOUND_MIXER_READ_PCM = SOUND_MIXER_READ_PCM;
    298   unsigned IOCTL_SOUND_MIXER_READ_RECLEV = SOUND_MIXER_READ_RECLEV;
    299   unsigned IOCTL_SOUND_MIXER_READ_RECMASK = SOUND_MIXER_READ_RECMASK;
    300   unsigned IOCTL_SOUND_MIXER_READ_RECSRC = SOUND_MIXER_READ_RECSRC;
    301   unsigned IOCTL_SOUND_MIXER_READ_SPEAKER = SOUND_MIXER_READ_SPEAKER;
    302   unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS = SOUND_MIXER_READ_STEREODEVS;
    303   unsigned IOCTL_SOUND_MIXER_READ_SYNTH = SOUND_MIXER_READ_SYNTH;
    304   unsigned IOCTL_SOUND_MIXER_READ_TREBLE = SOUND_MIXER_READ_TREBLE;
    305   unsigned IOCTL_SOUND_MIXER_READ_VOLUME = SOUND_MIXER_READ_VOLUME;
    306   unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM = SOUND_MIXER_WRITE_ALTPCM;
    307   unsigned IOCTL_SOUND_MIXER_WRITE_BASS = SOUND_MIXER_WRITE_BASS;
    308   unsigned IOCTL_SOUND_MIXER_WRITE_CD = SOUND_MIXER_WRITE_CD;
    309   unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE = SOUND_MIXER_WRITE_ENHANCE;
    310   unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN = SOUND_MIXER_WRITE_IGAIN;
    311   unsigned IOCTL_SOUND_MIXER_WRITE_IMIX = SOUND_MIXER_WRITE_IMIX;
    312   unsigned IOCTL_SOUND_MIXER_WRITE_LINE = SOUND_MIXER_WRITE_LINE;
    313   unsigned IOCTL_SOUND_MIXER_WRITE_LINE1 = SOUND_MIXER_WRITE_LINE1;
    314   unsigned IOCTL_SOUND_MIXER_WRITE_LINE2 = SOUND_MIXER_WRITE_LINE2;
    315   unsigned IOCTL_SOUND_MIXER_WRITE_LINE3 = SOUND_MIXER_WRITE_LINE3;
    316   unsigned IOCTL_SOUND_MIXER_WRITE_LOUD = SOUND_MIXER_WRITE_LOUD;
    317   unsigned IOCTL_SOUND_MIXER_WRITE_MIC = SOUND_MIXER_WRITE_MIC;
    318   unsigned IOCTL_SOUND_MIXER_WRITE_MUTE = SOUND_MIXER_WRITE_MUTE;
    319   unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN = SOUND_MIXER_WRITE_OGAIN;
    320   unsigned IOCTL_SOUND_MIXER_WRITE_PCM = SOUND_MIXER_WRITE_PCM;
    321   unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV = SOUND_MIXER_WRITE_RECLEV;
    322   unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC = SOUND_MIXER_WRITE_RECSRC;
    323   unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER = SOUND_MIXER_WRITE_SPEAKER;
    324   unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH = SOUND_MIXER_WRITE_SYNTH;
    325   unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE = SOUND_MIXER_WRITE_TREBLE;
    326   unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME = SOUND_MIXER_WRITE_VOLUME;
    327   unsigned IOCTL_VT_ACTIVATE = VT_ACTIVATE;
    328   unsigned IOCTL_VT_GETMODE = VT_GETMODE;
    329   unsigned IOCTL_VT_OPENQRY = VT_OPENQRY;
    330   unsigned IOCTL_VT_RELDISP = VT_RELDISP;
    331   unsigned IOCTL_VT_SETMODE = VT_SETMODE;
    332   unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE;
    333   unsigned IOCTL_GIO_SCRNMAP = GIO_SCRNMAP;
    334   unsigned IOCTL_KDDISABIO = KDDISABIO;
    335   unsigned IOCTL_KDENABIO = KDENABIO;
    336   unsigned IOCTL_KDGETLED = KDGETLED;
    337   unsigned IOCTL_KDGETMODE = KDGETMODE;
    338   unsigned IOCTL_KDGKBMODE = KDGKBMODE;
    339   unsigned IOCTL_KDGKBTYPE = KDGKBTYPE;
    340   unsigned IOCTL_KDMKTONE = KDMKTONE;
    341   unsigned IOCTL_KDSETLED = KDSETLED;
    342   unsigned IOCTL_KDSETMODE = KDSETMODE;
    343   unsigned IOCTL_KDSKBMODE = KDSKBMODE;
    344   unsigned IOCTL_KIOCSOUND = KIOCSOUND;
    345   unsigned IOCTL_PIO_SCRNMAP = PIO_SCRNMAP;
    346   unsigned IOCTL_SNDCTL_DSP_GETISPACE = SNDCTL_DSP_GETISPACE;
    347 
    348   const int si_SEGV_MAPERR = SEGV_MAPERR;
    349   const int si_SEGV_ACCERR = SEGV_ACCERR;
    350   const int unvis_valid = UNVIS_VALID;
    351   const int unvis_validpush = UNVIS_VALIDPUSH;
    352 } // namespace __sanitizer
    353 
    354 using namespace __sanitizer;
    355 
    356 COMPILER_CHECK(sizeof(__sanitizer_pthread_attr_t) >= sizeof(pthread_attr_t));
    357 
    358 COMPILER_CHECK(sizeof(socklen_t) == sizeof(unsigned));
    359 CHECK_TYPE_SIZE(pthread_key_t);
    360 
    361 // There are more undocumented fields in dl_phdr_info that we are not interested
    362 // in.
    363 COMPILER_CHECK(sizeof(__sanitizer_dl_phdr_info) <= sizeof(dl_phdr_info));
    364 CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_addr);
    365 CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_name);
    366 CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr);
    367 CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum);
    368 
    369 CHECK_TYPE_SIZE(glob_t);
    370 CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc);
    371 CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv);
    372 CHECK_SIZE_AND_OFFSET(glob_t, gl_offs);
    373 CHECK_SIZE_AND_OFFSET(glob_t, gl_flags);
    374 CHECK_SIZE_AND_OFFSET(glob_t, gl_closedir);
    375 CHECK_SIZE_AND_OFFSET(glob_t, gl_readdir);
    376 CHECK_SIZE_AND_OFFSET(glob_t, gl_opendir);
    377 CHECK_SIZE_AND_OFFSET(glob_t, gl_lstat);
    378 CHECK_SIZE_AND_OFFSET(glob_t, gl_stat);
    379 
    380 CHECK_TYPE_SIZE(addrinfo);
    381 CHECK_SIZE_AND_OFFSET(addrinfo, ai_flags);
    382 CHECK_SIZE_AND_OFFSET(addrinfo, ai_family);
    383 CHECK_SIZE_AND_OFFSET(addrinfo, ai_socktype);
    384 CHECK_SIZE_AND_OFFSET(addrinfo, ai_protocol);
    385 CHECK_SIZE_AND_OFFSET(addrinfo, ai_protocol);
    386 CHECK_SIZE_AND_OFFSET(addrinfo, ai_addrlen);
    387 CHECK_SIZE_AND_OFFSET(addrinfo, ai_canonname);
    388 CHECK_SIZE_AND_OFFSET(addrinfo, ai_addr);
    389 
    390 CHECK_TYPE_SIZE(hostent);
    391 CHECK_SIZE_AND_OFFSET(hostent, h_name);
    392 CHECK_SIZE_AND_OFFSET(hostent, h_aliases);
    393 CHECK_SIZE_AND_OFFSET(hostent, h_addrtype);
    394 CHECK_SIZE_AND_OFFSET(hostent, h_length);
    395 CHECK_SIZE_AND_OFFSET(hostent, h_addr_list);
    396 
    397 CHECK_TYPE_SIZE(iovec);
    398 CHECK_SIZE_AND_OFFSET(iovec, iov_base);
    399 CHECK_SIZE_AND_OFFSET(iovec, iov_len);
    400 
    401 CHECK_TYPE_SIZE(msghdr);
    402 CHECK_SIZE_AND_OFFSET(msghdr, msg_name);
    403 CHECK_SIZE_AND_OFFSET(msghdr, msg_namelen);
    404 CHECK_SIZE_AND_OFFSET(msghdr, msg_iov);
    405 CHECK_SIZE_AND_OFFSET(msghdr, msg_iovlen);
    406 CHECK_SIZE_AND_OFFSET(msghdr, msg_control);
    407 CHECK_SIZE_AND_OFFSET(msghdr, msg_controllen);
    408 CHECK_SIZE_AND_OFFSET(msghdr, msg_flags);
    409 
    410 CHECK_TYPE_SIZE(cmsghdr);
    411 CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len);
    412 CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level);
    413 CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type);
    414 
    415 COMPILER_CHECK(sizeof(__sanitizer_dirent) <= sizeof(dirent));
    416 CHECK_SIZE_AND_OFFSET(dirent, d_ino);
    417 CHECK_SIZE_AND_OFFSET(dirent, d_reclen);
    418 
    419 CHECK_TYPE_SIZE(ifconf);
    420 CHECK_SIZE_AND_OFFSET(ifconf, ifc_len);
    421 CHECK_SIZE_AND_OFFSET(ifconf, ifc_ifcu);
    422 
    423 CHECK_TYPE_SIZE(pollfd);
    424 CHECK_SIZE_AND_OFFSET(pollfd, fd);
    425 CHECK_SIZE_AND_OFFSET(pollfd, events);
    426 CHECK_SIZE_AND_OFFSET(pollfd, revents);
    427 
    428 CHECK_TYPE_SIZE(nfds_t);
    429 
    430 CHECK_TYPE_SIZE(sigset_t);
    431 
    432 COMPILER_CHECK(sizeof(__sanitizer_sigaction) == sizeof(struct sigaction));
    433 // Can't write checks for sa_handler and sa_sigaction due to them being
    434 // preprocessor macros.
    435 CHECK_STRUCT_SIZE_AND_OFFSET(sigaction, sa_mask);
    436 
    437 CHECK_TYPE_SIZE(wordexp_t);
    438 CHECK_SIZE_AND_OFFSET(wordexp_t, we_wordc);
    439 CHECK_SIZE_AND_OFFSET(wordexp_t, we_wordv);
    440 CHECK_SIZE_AND_OFFSET(wordexp_t, we_offs);
    441 
    442 CHECK_TYPE_SIZE(tm);
    443 CHECK_SIZE_AND_OFFSET(tm, tm_sec);
    444 CHECK_SIZE_AND_OFFSET(tm, tm_min);
    445 CHECK_SIZE_AND_OFFSET(tm, tm_hour);
    446 CHECK_SIZE_AND_OFFSET(tm, tm_mday);
    447 CHECK_SIZE_AND_OFFSET(tm, tm_mon);
    448 CHECK_SIZE_AND_OFFSET(tm, tm_year);
    449 CHECK_SIZE_AND_OFFSET(tm, tm_wday);
    450 CHECK_SIZE_AND_OFFSET(tm, tm_yday);
    451 CHECK_SIZE_AND_OFFSET(tm, tm_isdst);
    452 CHECK_SIZE_AND_OFFSET(tm, tm_gmtoff);
    453 CHECK_SIZE_AND_OFFSET(tm, tm_zone);
    454 
    455 CHECK_TYPE_SIZE(ether_addr);
    456 
    457 CHECK_TYPE_SIZE(ipc_perm);
    458 CHECK_SIZE_AND_OFFSET(ipc_perm, key);
    459 CHECK_SIZE_AND_OFFSET(ipc_perm, seq);
    460 CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
    461 CHECK_SIZE_AND_OFFSET(ipc_perm, gid);
    462 CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);
    463 CHECK_SIZE_AND_OFFSET(ipc_perm, cgid);
    464 
    465 CHECK_TYPE_SIZE(shmid_ds);
    466 CHECK_SIZE_AND_OFFSET(shmid_ds, shm_perm);
    467 CHECK_SIZE_AND_OFFSET(shmid_ds, shm_segsz);
    468 CHECK_SIZE_AND_OFFSET(shmid_ds, shm_atime);
    469 CHECK_SIZE_AND_OFFSET(shmid_ds, shm_dtime);
    470 CHECK_SIZE_AND_OFFSET(shmid_ds, shm_ctime);
    471 CHECK_SIZE_AND_OFFSET(shmid_ds, shm_cpid);
    472 CHECK_SIZE_AND_OFFSET(shmid_ds, shm_lpid);
    473 CHECK_SIZE_AND_OFFSET(shmid_ds, shm_nattch);
    474 
    475 CHECK_TYPE_SIZE(clock_t);
    476 
    477 CHECK_TYPE_SIZE(ifaddrs);
    478 CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_next);
    479 CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_name);
    480 CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_addr);
    481 CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_netmask);
    482 #undef ifa_dstaddr
    483 CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr);
    484 CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data);
    485 
    486 CHECK_TYPE_SIZE(timeb);
    487 CHECK_SIZE_AND_OFFSET(timeb, time);
    488 CHECK_SIZE_AND_OFFSET(timeb, millitm);
    489 CHECK_SIZE_AND_OFFSET(timeb, timezone);
    490 CHECK_SIZE_AND_OFFSET(timeb, dstflag);
    491 
    492 CHECK_TYPE_SIZE(passwd);
    493 CHECK_SIZE_AND_OFFSET(passwd, pw_name);
    494 CHECK_SIZE_AND_OFFSET(passwd, pw_passwd);
    495 CHECK_SIZE_AND_OFFSET(passwd, pw_uid);
    496 CHECK_SIZE_AND_OFFSET(passwd, pw_gid);
    497 CHECK_SIZE_AND_OFFSET(passwd, pw_dir);
    498 CHECK_SIZE_AND_OFFSET(passwd, pw_shell);
    499 
    500 CHECK_SIZE_AND_OFFSET(passwd, pw_gecos);
    501 
    502 CHECK_TYPE_SIZE(group);
    503 CHECK_SIZE_AND_OFFSET(group, gr_name);
    504 CHECK_SIZE_AND_OFFSET(group, gr_passwd);
    505 CHECK_SIZE_AND_OFFSET(group, gr_gid);
    506 CHECK_SIZE_AND_OFFSET(group, gr_mem);
    507 
    508 #if HAVE_RPC_XDR_H || HAVE_TIRPC_RPC_XDR_H
    509 CHECK_TYPE_SIZE(XDR);
    510 CHECK_SIZE_AND_OFFSET(XDR, x_op);
    511 CHECK_SIZE_AND_OFFSET(XDR, x_ops);
    512 CHECK_SIZE_AND_OFFSET(XDR, x_public);
    513 CHECK_SIZE_AND_OFFSET(XDR, x_private);
    514 CHECK_SIZE_AND_OFFSET(XDR, x_base);
    515 CHECK_SIZE_AND_OFFSET(XDR, x_handy);
    516 COMPILER_CHECK(__sanitizer_XDR_ENCODE == XDR_ENCODE);
    517 COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE);
    518 COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE);
    519 #endif
    520 
    521 CHECK_TYPE_SIZE(sem_t);
    522 
    523 COMPILER_CHECK(sizeof(__sanitizer_cap_rights_t) >= sizeof(cap_rights_t));
    524 #endif  // SANITIZER_FREEBSD
    525