We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 217d62c commit f8ad4abCopy full SHA for f8ad4ab
src/analyses/accessAnalysis.ml
@@ -182,6 +182,7 @@ struct
182
let reach =
183
match f.vname with
184
| "memset" | "__builtin_memset" | "__builtin___memset_chk" -> false
185
+ | "bzero" | "__builtin_bzero" | "explicit_bzero" | "__explicit_bzero_chk" -> false
186
| "__builtin_object_size" -> false
187
| _ -> true
188
in
src/analyses/base.ml
@@ -2134,6 +2134,20 @@ struct
2134
set ~ctx:(Some ctx) (Analyses.ask_of_ctx ctx) gs st dest_a dest_typ value
2135
| _, _ -> failwith "strange memset arguments"
2136
end
2137
+ | `Unknown (("bzero" | "__builtin_bzero" | "explicit_bzero" | "__explicit_bzero_chk") as name) ->
2138
+ (* TODO: share something with memset special case? *)
2139
+ begin match name, args with
2140
+ | "__explicit_bzero_chk", [dest; count; _ (* dest_size *)]
2141
+ | ("bzero" | "__builtin_bzero" | "explicit_bzero"), [dest; count] ->
2142
+ (* TODO: check count *)
2143
+ let dest_lval = mkMem ~addr:(Cil.stripCasts dest) ~off:NoOffset in
2144
+ let dest_a = eval_lv (Analyses.ask_of_ctx ctx) gs st dest_lval in
2145
+ (* let dest_typ = Cilfacade.typeOfLval dest_lval in *)
2146
+ let dest_typ = AD.get_type dest_a in (* TODO: what is the right way? *)
2147
+ let value = VD.zero_init_value dest_typ in
2148
+ set ~ctx:(Some ctx) (Analyses.ask_of_ctx ctx) gs st dest_a dest_typ value
2149
+ | _, _ -> failwith "strange bzero arguments"
2150
+ end
2151
| `Unknown "F59" (* strcpy *)
2152
| `Unknown "F60" (* strncpy *)
2153
| `Unknown "F63" (* memcpy *)
src/analyses/libraryFunctions.ml
@@ -185,6 +185,9 @@ let invalidate_actions = [
"__builtin_ctzll", readsAll;
"__builtin_clz", readsAll;
"bzero", writes [1]; (*keep 1*)
+ "__builtin_bzero", writes [1]; (*keep [1]*)
189
+ "explicit_bzero", writes [1];
190
+ "__explicit_bzero_chk", writes [1];
191
"connect", readsAll; (*safe*)
192
"fclose", readsAll; (*safe*)
193
"fflush", writesAll; (*unsafe*)
@@ -398,7 +401,6 @@ let invalidate_actions = [
398
401
"__maskrune", writesAll; (*unsafe*)
399
402
"inet_addr", readsAll; (*safe*)
400
403
"gethostbyname", readsAll; (*safe*)
- "__builtin_bzero", writes [1]; (*keep [1]*)
404
"setsockopt", readsAll; (*safe*)
405
"listen", readsAll; (*safe*)
406
"getsockname", writes [1;3]; (*keep [1;3]*)
0 commit comments