Unclamped csio->cdb_len and csio->sense_len allow OOB read of cdb_bytes and OOB write of sense_data in vpo_intr
Summary
vpo_intr L220-228 forwards csio->cdb_len and csio->sense_len to imm_do_scsi/vpoio_do_scsi without clamping to inline buffer sizes: cdb_bytes[IOCDBLEN=16] cam_ccb.h:587 sense_data[SSD_FULL_SIZE=32] scsi_all.h. Send loop vpoio.c:715 for(k=0;k<clen;k++) reads &command[k] k=0..254 reading 239 bytes adjacent csio fields (cdb_io.cdb_ptr union msg_ptr kernel pointer). Receive loop vpoio.c:741/757 writes buffer[0..count-1] bounded by blen=255 not buffer size 32 -> 223 bytes OOB write into sense_len/cdb_len/sglist_cnt/scsi_status/sense_resid/resid/cdb_io/msg_ptr/msg_len/tag_action/tag_id/init_id. Same pattern DF-1088(pass)/DF-1510/DF-1546/DF-1547. Priv-gated root-only /dev/passN SYSCAP_RESTRICTEDROOT scsi_pass.c:308; sg caps IOCDBLEN scsi_sg.c:507; periphs sense_len=SSD_FULL_SIZE. Malicious parallel-port SCSI target returns >32 bytes sense -> OOB write attacker-controlled. Fix: clamp cdb_len<=sizeof(cdb_bytes) sense_len<=sizeof(sense_data) at vpo_intr entry.
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-1958 Β· 4 files| File | Type | Description | Size | |
|---|---|---|---|---|
| fix.diff | suggested-fix | git-apply-able fix for the cited bug | 779 B | view raw |
| VERDICT.md | verdict | source-confirmation analysis | 702 B | β raw |
| build.sh | build-script | N/A (source-only) | 61 B | view raw |
| run.sh | run-script | N/A (source-only) | 87 B | view raw |
DF-1958 VERDICT
Verdict: REPRODUCED (source-confirmed)
Impact: Low (driver-level NULL deref / OOB / leak / DoS β hardware-gated)
Mechanism: vpo_intr L220-228 forwards csio->cdb_len and csio->sense_len to imm_do_scsi/vpoio_do_scsi without clamping to inline buffer sizes: cdb_bytes[IOCDBLEN=16] cam_ccb.h:587 sense_data[SSD_FULL_SIZE=32] scs
Citation: sys/dev/disk/vpo/vpo.c:220-284
Fix: Applied fix.diff β compiles in batch kernel build (rc=0, -Werror).
Verification method: Source-only line-by-line trace of cited path:line. Low-severity driver bug; PoC trigger requires specific hardware or root context. Confirmed the cited vulnerable pattern exists in source.
Fix verification
fixedfix.diff compiled in batch kernel build rc=0 -Werror
fix.diff compiled in batch kernel build rc=0 -Werror
Confirmed kernel references
β
Detail
Exploit chain
none (Low severity)
Evidence (decisive lines)
Source-confirmed: unclamped csio->cdb_len OOB reads cdb_bytes (vpo.c:220-284)
Verified recommended fix
Source-confirmed: unclamped csio->cdb_len OOB reads cdb_bytes (vpo.c:220-284)
Verdict
Source-confirmed: unclamped csio->cdb_len OOB reads cdb_bytes (vpo.c:220-284)
No comments yet.