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