Description
In the Linux kernel, the following vulnerability has been resolved: scsi: xen: scsiback: Free unsubmitted command instead of double-putting it scsiback_get_pend_req() obtains a command tag and returns a vscsibk_pend whose embedded se_cmd has only been memset to 0, so its cmd_kref is 0; the se_cmd is initialised (kref_init() via target_init_cmd()) only later, in scsiback_cmd_exec(), on the successful VSCSIIF_ACT_SCSI_CDB path. The two error paths in scsiback_do_cmd_fn() taken before the command is submitted -- a failed scsiback_gnttab_data_map() and an unknown ring_req.act -- call transport_generic_free_cmd(&pending_req->se_cmd, 0), which kref_put()s a refcount of 0. That underflows it ("refcount_t: underflow; use-after-free") and, as the release function is not run, leaks the command tag. Impact: a pvSCSI guest can leak every command tag of a LUN's session, stopping the LUN, by submitting requests with a bad grant reference or an unknown request type; under panic_on_warn the refcount underflow panics the host. Add a helper that just returns the tag with target_free_tag() and sends the error response. It frees the tag while the v2p reference still pins the session, and snapshots the response fields beforehand because freeing the tag can let another ring reuse the pending_req slot.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
2dbcdf33dbf61f44b29adb52338282c3d7840d0e to < 9c0f6894982b1f13bda220707497b25ac9c95bdbaffected2dbcdf33dbf61f44b29adb52338282c3d7840d0e to < a13b789497a7fdd27d4d63f5c69d23db706ef0feaffected2dbcdf33dbf61f44b29adb52338282c3d7840d0e to < fa588f28401102652068c4cc75e135507f4b5106affected2dbcdf33dbf61f44b29adb52338282c3d7840d0e to < fcd64d4d97af5d9736f31040f8ed8cd4c17e4c45affected2dbcdf33dbf61f44b29adb52338282c3d7840d0e to < f1516c56ac540da1769f264c3cfefe4499548a5daffected2dbcdf33dbf61f44b29adb52338282c3d7840d0e to < 1e97c404e44991fb087c38ccd7414f2d326f9b74affected2dbcdf33dbf61f44b29adb52338282c3d7840d0e to < ca978f8a93d4d36841839bf2847d29b88c2591d6affected
Linux Linux
Default version status: affected
4.6affected0 to < 4.6unaffected5.15.212 to ≤ 5.15.*unaffected6.1.178 to ≤ 6.1.*unaffected6.6.145 to ≤ 6.6.*unaffected6.12.97 to ≤ 6.12.*unaffected6.18.40 to ≤ 6.18.*unaffected7.1.5 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/9c0f6894982b1f13bda220707497b25ac9c95bdb ↗
- https://git.kernel.org/stable/c/a13b789497a7fdd27d4d63f5c69d23db706ef0fe ↗
- https://git.kernel.org/stable/c/fa588f28401102652068c4cc75e135507f4b5106 ↗
- https://git.kernel.org/stable/c/fcd64d4d97af5d9736f31040f8ed8cd4c17e4c45 ↗
- https://git.kernel.org/stable/c/f1516c56ac540da1769f264c3cfefe4499548a5d ↗
- https://git.kernel.org/stable/c/1e97c404e44991fb087c38ccd7414f2d326f9b74 ↗
- https://git.kernel.org/stable/c/ca978f8a93d4d36841839bf2847d29b88c2591d6 ↗