scsi: xen/scsifront: Check for a NULL shadow entry on a backend response
Impact
In the Linux kernel, the following vulnerability has been resolved:
Source excerpt · LinuxAffected packages
Affected products
Vendor version evidence. Product records are separate from automatic dependency matching.
Linux · Linux
Other versions: unaffected
| Version / range | Source status |
|---|---|
| 6d1c2f48f3fcf5f42967938c8ba6b42ac6b44b43 to before 1d91ec793d6c80eca963d426e0da832d40a062df | affected |
| 6d1c2f48f3fcf5f42967938c8ba6b42ac6b44b43 to before 15791e57f57f7050014d08cfe239d4aa1e6b94b0 | affected |
| 6d1c2f48f3fcf5f42967938c8ba6b42ac6b44b43 to before 8c8222c255772713eb36cde695777a1fce224917 | affected |
Linux · Linux
Other versions: affected
| Version / range | Source status |
|---|---|
| 5.19 | affected |
| 0 to before 5.19 | unaffected |
| 6.18.59 through 6.18.* (inclusive) | unaffected |
| 7.2.13 through 7.2.* (inclusive) | unaffected |
| 7.3 through * (inclusive) | unaffected |
Original source description
In the Linux kernel, the following vulnerability has been resolved:
scsi: xen/scsifront: Check for a NULL shadow entry on a backend response
scsifront_do_response() validates the rqid in a backend response against VSCSIIF_MAX_REQS before using it to index info->shadow[], but then dereferences the entry to test ->inflight without checking that the slot is populated. Shadow slots are NULL before a command is submitted (the host private area is zeroed at allocation) and are reset to NULL in _scsifront_put_rqid() once a request completes, so an in-range rqid that does not correspond to an outstanding request makes the frontend dereference a NULL pointer.
A malicious or buggy backend can thus crash the guest by returning a response whose rqid is in range but not in flight -- for example a spurious response before any command has been issued, or a duplicate of one already completed. The ring has only VSCSIIF_MAX_REQS (16) slots, so before the first command every in-range rqid selects a NULL slot.
Reject a response whose shadow slot is not populated.