DF-5108 / manifest.json
{ "finding_id": "DF-5108", "title": "lockrange() commits pos one past plex->lock[PLEX_LOCKS] when the table fills while a conflicted requester sleeps (16-byte heap OOB write + usedlocks overrun defeating the == fullness checks)", "kernel_refs": [ "sys/dev/raid/vinum/vinumlock.c:139", "sys/dev/raid/vinum/vinumlock.c:167", "sys/dev/raid/vinum/vinumlock.c:181", "sys/dev/raid/vinum/vinumlock.c:188", "sys/dev/raid/vinum/vinumlock.c:219", "sys/dev/raid/vinum/vinumraid5.c:592", "sys/dev/raid/vinum/vinumrequest.c:397", "sys/dev/raid/vinum/vinumconfig.c:1467" ], "trigger": "concurrent conflicting + distinct-stripe RAID-5 I/O with >=256 in-flight request groups on one plex; unprivileged via filesystem on a vinum volume", "artifacts": [ "lockrange_race.c", "vcreate.c", "setup.sh", "ulmon.c", "cfg_raid5.bin", "cfg_raid5_pad.bin", "lbl_x0.bin", "lbl_x1.bin", "lbl_x2.bin", "lbl_d0.bin", "run.log", "fix.diff", "VERDICT.md", "manifest.json", "verdict.json" ], "reproduce": { "build": "cc -O2 -pthread -o lockrange_race lockrange_race.c && cc -O2 -o vcreate vcreate.c", "run": "sh setup.sh && ./lockrange_race /dev/vinum/vol/rv 800 300 270 32768", "expected": "on a system sustaining >=256 in-flight rangelocks with same-stripe conflicts: heap corruption past the 4 KB plex->lock allocation (panic at next unlockrange/lockrange or silent corruption of the adjacent kernel page) or uninterruptible 'vlock' sleepers; NOT achieved on this 6-vCPU guest within 3 x 300 s runs (in-flight depth ~80-160)" } } |