⬢ DragonFlyBSD Kernel Audit
DF-4737 / run.log
← back to finding ↓ download raw
=== DF-4737 run (guest) ===
== buggy loop (verbatim amdpm.c:308/319 `while(count--)` + `if (!count)`) ==
A      clear_on_read=0     polls=10000  error=0x0    NO-TIMEOUT
B      clear_on_read=10000 polls=10000  error=0x20   TIMEOUT-REPORTED
C      clear_on_read=5000  polls=5000   error=0x0    NO-TIMEOUT

== expectations ==
A (perpetual busy): SMB_ETIMEOUT SHOULD be set -> MISSING (reported success 0x0) -- BUG
B (final-poll done): SMB_ETIMEOUT should NOT be set -> SPURIOUS SMB_ETIMEOUT -- BUG
C (midway done): no error expected -> ok
A also returned SMB_ENOERR (0x0): callers (amdpm_recvb/readb/readw
amdpm.c:419-420/475-476/531-532; amdpm_bread amdpm.c:610-622)
return stale HSTDATA/FIFO data as a SUCCESSFUL transfer.

== fixed loop (`if (count < 0)`) ==
A      clear_on_read=0     polls=10000  error=0x20   TIMEOUT-REPORTED
B      clear_on_read=10000 polls=10000  error=0x0    NO-TIMEOUT
fixed A reports TIMEOUT: yes ; fixed B reports success: yes

bugs demonstrated in buggy loop: 2
exit=0