-
Notifications
You must be signed in to change notification settings - Fork 169
Conversation
Verdict false was incorrect, because of kzalloc model absence
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the correction by the contributor of the verification tasks.
SMACK actually reports a bug for |
Thanks for letting us know. Let's discuss before merging. |
@zvonimir Can you please put in a review with "changes required"? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure why this label should be changed. It seems that several tools do report a bug on this benchmark. I think I am reading this right:
https://www.sosy-lab.org/research/witness-based-debugging/inspect.php?programSHA=87f2d6c2dad7df4170b8a425e697c69fd1a57a2e&programName=..%2Fsv-benchmarks%2Fc%2Fldv-linux-4.0-rc1-mav%2Flinux-4.0-rc1---drivers--usb--misc--adutux.ko_false-unreach-call.cil.c&witnessSHA=25f4cee875d44871d0e2b41c20e1c42af92f4951&witnessName=..%2Fresults-verified%2Fsmack.2016-12-25_1714.logfiles%2Fsv-comp17.linux-4.0-rc1---drivers--usb--misc--adutux.ko_false-unreach-call.cil.c.files%2Fwitness.graphml
We (team SMACK) unfortunately don't have any fancy tools (yet :)) for inspecting our witnesses, and so we do it manually using out txt error trace output (not witness automata). Others maybe have better tools, not sure about that. |
First of all, I want to note that the page with list of witnesses is misleading, because it does not tell correctness witnesses from violation witnesses. To find violation witnesses you have to open each witness and look to witness-type key. Dirk (@dbeyer), is it possible to separate witnesses by type? Anyway the information was very helpful. I have inspected SMACK 1.7.1 witness. It looks like many steps are missing in the witness, but I was able to understand it. First of all, adu_open is called which checks that device is not null and plugged in. which means that The device is stored in parameter After that the witness contains a call to The function
As I can see nobody unplugged the device, which can be done by |
The Travis CI has failed, but it seems that it should be just restarted
|
@mutilin Thanks for your suggested improvement to the witness table. |
Usually what happens in device driver benchmarks is that there is a write to unallocated memory somewhere, that can then overwrite anything, causing a a bug to be reachable. Please give us until Monday night to study this problem in more detail. |
I did some study on this benchmark and here is what I found: First of all, Then in line 4980, function Since Please let me know if it makes sense. I think we should not change the label of this benchmark to true unless unallocated memory accesses are fixed. |
Of course, in Linux usb_find_interface could not return pointer where usb->interval is aliased with file->private_data (See implementation). That is why we need assumptions on pointers for undefined functions introduced by RAM (or on-demand memory) in #230. |
@mutilin If you want this pull request to go through, you might have to include the fix for the benchmark that you are requesting in this pull request. |
Hi @mutilin, I have spent some time to try to fix this benchmark. However, it is not easy as I thought it to be because of nested structure objects. So I was wondering if it is possible to keep the current label and relabel it once we adopt a systematic way to deal with such issue (e.g., RAM proposed in #230). |
If the verification task does not correctly implement the submitter's intention, and |
@dbeyer, I have moved benchmark into |
@zvonimir Please unblock. |
Verdict false was incorrect, because it was obtained on the old environment model where kzalloc was not modeled with calloc. The correct verdict is true