You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
("lstat", unknown [drop "pathname" [r]; drop "statbuf" [w]]);
253
+
("fstat", unknown [drop "fd" []; drop "buf" [w]]);
254
+
("fstatat", unknown [drop "dirfd" []; drop "pathname" [r]; drop "buf" [w]; drop "flags" []]);
249
255
("getpwnam", unknown [drop "name" [r]]);
250
256
("chdir", unknown [drop "path" [r]]);
251
257
("closedir", unknown [drop "dirp" [r]]);
@@ -292,12 +298,32 @@ let posix_descs_list: (string * LibraryDesc.t) list = LibraryDsl.[
292
298
("getaddrinfo", unknown [drop "node" [r]; drop "service" [r]; drop "hints" [r_deep]; drop "res" [w]]); (* only write res non-deep because it doesn't write to existing fields of res *)
293
299
("fnmatch", unknown [drop "pattern" [r]; drop "string" [r]; drop "flags" []]);
294
300
("realpath", unknown [drop "path" [r]; drop "resolved_path" [w]]);
("vdprintf", unknown [drop "fd" []; drop "format" [r]; drop "ap" [r_deep]]); (* TODO: what to do with a va_list type? is r_deep correct? *)
303
+
("mkdtemp", unknown [drop "template" [r; w]]);
304
+
("mkstemp", unknown [drop "template" [r; w]]);
305
+
("regcomp", unknown [drop "preg" [w_deep]; drop "regex" [r]; drop "cflags" []]);
306
+
("regexec", unknown [drop "preg" [r_deep]; drop "string" [r]; drop "nmatch" []; drop "pmatch" [w_deep]; drop "eflags" []]);
307
+
("regfree", unknown [drop "preg" [f_deep]]);
308
+
("ffs", unknown [drop "i" []]);
309
+
("_exit", special [drop "status" []] Abort);
310
+
("execvp", unknown [drop "file" [r]; drop "argv" [r_deep]]);
311
+
("statvfs", unknown [drop "path" [r]; drop "buf" [w]]);
312
+
("readlink", unknown [drop "path" [r]; drop "buf" [w]; drop "bufsz" []]);
313
+
("wcswidth", unknown [drop "s" [r]; drop "n" []]);
314
+
("link", unknown [drop "oldpath" [r]; drop "newpath" [r]]);
315
+
("renameat", unknown [drop "olddirfd" []; drop "oldpath" [r]; drop "newdirfd" []; drop "newpath" [r]]);
316
+
("posix_fadvise", unknown [drop "fd" []; drop "offset" []; drop "len" []; drop "advice" []]);
317
+
("getppid", unknown []);
318
+
("lockf", unknown [drop "fd" []; drop "cmd" []; drop "len" []]);
295
319
]
296
320
297
321
(** Pthread functions. *)
298
322
let pthread_descs_list: (string*LibraryDesc.t) list=LibraryDsl.[
299
323
("pthread_create", special [__ "thread" [w]; drop "attr" [r]; __ "start_routine" [s]; __ "arg" []] @@funthreadstart_routinearg -> ThreadCreate { thread; start_routine; arg }); (* For precision purposes arg is not considered accessed here. Instead all accesses (if any) come from actually analyzing start_routine. *)
300
324
("pthread_exit", special [__ "retval" []] @@funretval -> ThreadExit { ret_val = retval }); (* Doesn't dereference the void* itself, but just passes to pthread_join. *)
("__builtin_va_copy", unknown [drop "dest" [w]; drop "src" [r]]);
441
+
("__builtin_alloca", special [__ "size" []] @@funsize -> Malloc size);
415
442
]
416
443
417
444
let glibc_desc_list: (string*LibraryDesc.t) list=LibraryDsl.[
@@ -454,6 +481,11 @@ let glibc_desc_list: (string * LibraryDesc.t) list = LibraryDsl.[
454
481
("fopencookie", unknown [drop "cookie" []; drop "mode" [r]; drop "io_funcs" [s_deep]]); (* doesn't access cookie but passes it to io_funcs *)
455
482
("mempcpy", special [__ "dest" [w]; __ "src" [r]; drop "n" []] @@fundestsrc -> Memcpy { dest; src });
456
483
("__builtin___mempcpy_chk", special [__ "dest" [w]; __ "src" [r]; drop "n" []; drop "os" []] @@fundestsrc -> Memcpy { dest; src });
484
+
("rawmemchr", unknown [drop "s" [r]; drop "c" []]);
485
+
("memrchr", unknown [drop "s" [r]; drop "c" []; drop "n" []]);
486
+
("memmem", unknown [drop "haystack" [r]; drop "haystacklen" []; drop "needle" [r]; drop "needlelen" [r]]);
487
+
("getifaddrs", unknown [drop "ifap" [w]]);
488
+
("freeifaddrs", unknown [drop "ifa" [f_deep]]);
457
489
]
458
490
459
491
let linux_userspace_descs_list: (string*LibraryDesc.t) list=LibraryDsl.[
@@ -470,6 +502,12 @@ let linux_userspace_descs_list: (string * LibraryDesc.t) list = LibraryDsl.[
470
502
("__xpg_basename", unknown [drop "path" [r]]);
471
503
("ptrace", unknown (drop "request"[] :: VarArgs (drop' [r_deep; w_deep]))); (* man page has 4 arguments, but header has varargs and real-world programs may call with <4 *)
472
504
("madvise", unknown [drop "addr" []; drop "length" []; drop "advice" []]);
505
+
("inotify_init1", unknown [drop "flags" []]);
506
+
("inotify_add_watch", unknown [drop "fd" []; drop "pathname" [r]; drop "mask" []]);
507
+
("inotify_rm_watch", unknown [drop "fd" []; drop "wd" []]);
508
+
("fts_open", unknown [drop "path_argv" [r_deep]; drop "options" []; drop "compar" [s]]); (* TODO: use Call instead of Spawn *)
0 commit comments