Skip to content

Commit 5aa4204

Browse files
Some ~15 more library functions (#1203)
* More socket * `recvfrom` * `writev` / `readv` * `popen` * `stat` / `fstat` * `statfs` * `mount` / `umount` * Fix `select` Co-authored-by: Simmo Saan <[email protected]> * Rm duplicate `fstat` Co-authored-by: Simmo Saan <[email protected]> * Rm duplicates --------- Co-authored-by: Simmo Saan <[email protected]>
1 parent 8468a5a commit 5aa4204

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

src/analyses/libraryFunctions.ml

+17-16
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,9 @@ let posix_descs_list: (string * LibraryDesc.t) list = LibraryDsl.[
285285
("read", unknown [drop "fd" []; drop "buf" [w]; drop "count" []]);
286286
("write", unknown [drop "fd" []; drop "buf" [r]; drop "count" []]);
287287
("recv", unknown [drop "sockfd" []; drop "buf" [w]; drop "len" []; drop "flags" []]);
288+
("recvfrom", unknown [drop "sockfd" []; drop "buf" [w]; drop "len" []; drop "flags" []; drop "src_addr" [w_deep]; drop "addrlen" [r; w]]);
288289
("send", unknown [drop "sockfd" []; drop "buf" [r]; drop "len" []; drop "flags" []]);
290+
("sendto", unknown [drop "sockfd" []; drop "buf" [r]; drop "len" []; drop "flags" []; drop "dest_addr" [r_deep]; drop "addrlen" []]);
289291
("strdup", unknown [drop "s" [r]]);
290292
("strndup", unknown [drop "s" [r]; drop "n" []]);
291293
("syscall", unknown (drop "number" [] :: VarArgs (drop' [r; w])));
@@ -373,6 +375,18 @@ let posix_descs_list: (string * LibraryDesc.t) list = LibraryDsl.[
373375
("uname", unknown [drop "buf" [w_deep]]);
374376
("strcasecmp", unknown [drop "s1" [r]; drop "s2" [r]]);
375377
("strncasecmp", unknown [drop "s1" [r]; drop "s2" [r]; drop "n" []]);
378+
("connect", unknown [drop "sockfd" []; drop "sockaddr" [r_deep]; drop "addrlen" []]);
379+
("bind", unknown [drop "sockfd" []; drop "sockaddr" [r_deep]; drop "addrlen" []]);
380+
("listen", unknown [drop "sockfd" []; drop "backlog" []]);
381+
("select", unknown [drop "nfds" []; drop "readfds" [r; w]; drop "writefds" [r; w]; drop "exceptfds" [r; w]; drop "timeout" [r; w]]);
382+
("accept", unknown [drop "sockfd" []; drop "addr" [w_deep]; drop "addrlen" [r; w]]);
383+
("close", unknown [drop "fd" []]);
384+
("writev", unknown [drop "fd" []; drop "iov" [r_deep]; drop "iovcnt" []]);
385+
("readv", unknown [drop "fd" []; drop "iov" [w_deep]; drop "iovcnt" []]);
386+
("unlink", unknown [drop "pathname" [r]]);
387+
("popen", unknown [drop "command" [r]; drop "type" [r]]);
388+
("stat", unknown [drop "pathname" [r]; drop "statbuf" [w]]);
389+
("statfs", unknown [drop "path" [r]; drop "buf" [w]]);
376390
]
377391

378392
(** Pthread functions. *)
@@ -588,6 +602,9 @@ let linux_userspace_descs_list: (string * LibraryDesc.t) list = LibraryDsl.[
588602
("fts_open", unknown [drop "path_argv" [r_deep]; drop "options" []; drop "compar" [s]]); (* TODO: use Call instead of Spawn *)
589603
("fts_read", unknown [drop "ftsp" [r_deep; w_deep]]);
590604
("fts_close", unknown [drop "ftsp" [f_deep]]);
605+
("mount", unknown [drop "source" [r]; drop "target" [r]; drop "filesystemtype" [r]; drop "mountflags" []; drop "data" [r]]);
606+
("umount", unknown [drop "target" [r]]);
607+
("umount2", unknown [drop "target" [r]; drop "flags" []]);
591608
]
592609

593610
let big_kernel_lock = AddrOf (Cil.var (Cilfacade.create_var (makeGlobalVar "[big kernel lock]" intType)))
@@ -1100,7 +1117,6 @@ open Invalidate
11001117
* We assume that no known functions that are reachable are executed/spawned. For that we use ThreadCreate above. *)
11011118
(* WTF: why are argument numbers 1-indexed (in partition)? *)
11021119
let invalidate_actions = [
1103-
"connect", readsAll; (*safe*)
11041120
"__printf_chk", readsAll;(*safe*)
11051121
"printk", readsAll;(*safe*)
11061122
"__mutex_init", readsAll;(*safe*)
@@ -1118,23 +1134,17 @@ let invalidate_actions = [
11181134
"atoi__extinline", readsAll;(*safe*)
11191135
"_IO_getc", writesAll;(*unsafe*)
11201136
"pipe", writesAll;(*unsafe*)
1121-
"close", writesAll;(*unsafe*)
11221137
"strerror_r", writesAll;(*unsafe*)
11231138
"raise", writesAll;(*unsafe*)
11241139
"_strlen", readsAll;(*safe*)
11251140
"stat__extinline", writesAllButFirst 1 readsAll;(*drop 1*)
11261141
"lstat__extinline", writesAllButFirst 1 readsAll;(*drop 1*)
1127-
"umount2", readsAll;(*safe*)
11281142
"waitpid", readsAll;(*safe*)
1129-
"statfs", writes [1;3;4];(*keep [1;3;4]*)
1130-
"mount", readsAll;(*safe*)
11311143
"__open_alias", readsAll;(*safe*)
11321144
"__open_2", readsAll;(*safe*)
11331145
"ioctl", writesAll;(*unsafe*)
11341146
"fstat__extinline", writesAll;(*unsafe*)
1135-
"umount", readsAll;(*safe*)
11361147
"scandir", writes [1;3;4];(*keep [1;3;4]*)
1137-
"unlink", readsAll;(*safe*)
11381148
"sigwait", writesAllButFirst 1 readsAll;(*drop 1*)
11391149
"bindtextdomain", readsAll;(*safe*)
11401150
"textdomain", readsAll;(*safe*)
@@ -1149,11 +1159,9 @@ let invalidate_actions = [
11491159
"svctcp_create", readsAll;(*safe*)
11501160
"clntudp_bufcreate", writesAll;(*unsafe*)
11511161
"authunix_create_default", readsAll;(*safe*)
1152-
"writev", readsAll;(*safe*)
11531162
"clnt_broadcast", writesAll;(*unsafe*)
11541163
"clnt_sperrno", readsAll;(*safe*)
11551164
"pmap_unset", writesAll;(*unsafe*)
1156-
"bind", readsAll;(*safe*)
11571165
"svcudp_create", readsAll;(*safe*)
11581166
"svc_register", writesAll;(*unsafe*)
11591167
"svc_run", writesAll;(*unsafe*)
@@ -1162,27 +1170,20 @@ let invalidate_actions = [
11621170
"__builtin___vsnprintf_chk", writesAllButFirst 3 readsAll; (*drop 3*)
11631171
"__error", readsAll; (*safe*)
11641172
"__maskrune", writesAll; (*unsafe*)
1165-
"listen", readsAll; (*safe*)
1166-
"select", writes [1;5]; (*keep [1;5]*)
1167-
"accept", writesAll; (*keep [1]*)
11681173
"times", writesAll; (*unsafe*)
11691174
"timespec_get", writes [1];
11701175
"__tolower", readsAll; (*safe*)
11711176
"signal", writesAll; (*unsafe*)
1172-
"popen", readsAll; (*safe*)
11731177
"BF_cfb64_encrypt", writes [1;3;4;5]; (*keep [1;3;4,5]*)
11741178
"BZ2_bzBuffToBuffDecompress", writes [3;4]; (*keep [3;4]*)
11751179
"uncompress", writes [3;4]; (*keep [3;4]*)
1176-
"stat", writes [2]; (*keep [1]*)
11771180
"__xstat", writes [3]; (*keep [1]*)
11781181
"__lxstat", writes [3]; (*keep [1]*)
11791182
"remove", readsAll;
11801183
"BZ2_bzBuffToBuffCompress", writes [3;4]; (*keep [3;4]*)
11811184
"compress2", writes [3]; (*keep [3]*)
11821185
"__toupper", readsAll; (*safe*)
11831186
"BF_set_key", writes [3]; (*keep [3]*)
1184-
"sendto", writes [2;4]; (*keep [2;4]*)
1185-
"recvfrom", writes [4;5]; (*keep [4;5]*)
11861187
"PL_NewHashTable", readsAll; (*safe*)
11871188
"assert_failed", readsAll; (*safe*)
11881189
"munmap", readsAll;(*safe*)

0 commit comments

Comments
 (0)