CVE: CVE-2022-49701
Published: 2025-02-26
Description: In the Linux kernel, the following vulnerability has been resolved:

scsi: ibmvfc: Allocate/free queue resource only during probe/remove

Currently, the sub-queues and event pool resources are allocated/freed for
every CRQ connection event such as reset and LPM. This exposes the driver
to a couple issues. First the inefficiency of freeing and reallocating
memory that can simply be resued after being sanitized. Further, a system
under memory pressue runs the risk of allocation failures that could result
in a crippled driver. Finally, there is a race window where command
submission/compeletion can try to pull/return elements from/to an event
pool that is being deleted or already has been deleted due to the lack of
host state around freeing/allocating resources. The following is an example
of list corruption following a live partition migration (LPM):

Oops: Exception in kernel mode, sig: 5 [#1]
LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries
Modules linked in: vfat fat isofs cdrom ext4 mbcache jbd2 nft_counter nft_compat nf_tables nfnetlink rpadlpar_io rpaphp xsk_diag nfsv3 nfs_acl nfs lockd grace fscache netfs rfkill bonding tls sunrpc pseries_rng drm drm_panel_orientation_quirks xfs libcrc32c dm_service_time sd_mod t10_pi sg ibmvfc scsi_transport_fc ibmveth vmx_crypto dm_multipath dm_mirror dm_region_hash dm_log dm_mod ipmi_devintf ipmi_msghandler fuse
CPU: 0 PID: 2108 Comm: ibmvfc_0 Kdump: loaded Not tainted 5.14.0-70.9.1.el9_0.ppc64le #1
NIP: c[PII_REDACTED]c4bb0 LR: c[PII_REDACTED]c4bac CTR:[PII_REDACTED]5b9a10
REGS: c00000025c10b760 TRAP: 0700  Not tainted (5.14.0-70.9.1.el9_0.ppc64le)
MSR:[PII_REDACTED]82b033 <SF,VEC,VSX,EE,FP,ME,IR,DR,RI,LE> CR: 2800028f XER: 0000000f
CFAR: c[PII_REDACTED]f55bc IRQMASK: 0
        GPR00: c[PII_REDACTED]c4bac c00000025c10ba00 c000000002a47c00[PII_REDACTED]00004e
        GPR04: c0000031e3006f88 c0000031e308bd00 c00000025c10b768 [PII_REDACTED]
        GPR08: [PII_REDACTED] c0000031e3009dc0 00000031e0eb0000 [PII_REDACTED]
        GPR12: c0000031e2ffffa8 c000000002dd0000 c[PII_REDACTED]87108 c00000020fcee2c0
        GPR16: [PII_REDACTED] [PII_REDACTED] [PII_REDACTED] [PII_REDACTED]
        GPR20: [PII_REDACTED] [PII_REDACTED] [PII_REDACTED] c008000002f81300
        GPR24: 5deadbeef0000100 5deadbeef0000122 c000000263ba6910 c00000024cc88000
        GPR28:[PII_REDACTED]00003c c[PII_REDACTED]a0000 c[PII_REDACTED]ac[PII_REDACTED]00000c300
NIP [c[PII_REDACTED]c4bb0] __list_del_entry_valid+0x90/0x100
LR [c[PII_REDACTED]c4bac] __list_del_entry_valid+0x8c/0x100
Call Trace:
[c00000025c10ba00] [c[PII_REDACTED]c4bac] __list_del_entry_valid+0x8c/0x100 (unreliable)
[c00000025c10ba60] [c008000002f42284] ibmvfc_free_queue+0xec/0x210 [ibmvfc]
[c00000025c10bb10] [c008000002f4246c] ibmvfc_deregister_scsi_channel+0xc4/0x160 [ibmvfc]
[c00000025c10bba0] [c008000002f42580] ibmvfc_release_sub_crqs+0x78/0x130 [ibmvfc]
[c00000025c10bc20] [c008000002f4f6cc] ibmvfc_do_work+0x5c4/0xc70 [ibmvfc]
[c00000025c10bce0] [c008000002f4fdec] ibmvfc_work+0x74/0x1e8 [ibmvfc]
[c00000025c10bda0] [c[PII_REDACTED]872b8] kthread+0x1b8/0x1c0
[c00000025c10be10] [c[PII_REDACTED]0cd64] ret_from_kernel_thread+0x5c/0x64
Instruction dump:
[PII_REDACTED] 38210060 4e800020 7c0802a6 7c641b78 3c62fe7a 7d254b78
3863b590 f8010070 4ba309cd 60000000 <0fe00000> 7c0802a6 3c62fe7a 3863b640
---[ end trace 11a2b65a92f8b66c ]---
ibmvfc 30000003: Send warning. Receive queue closed, will retry.

Add registration/deregistration helpers that are called instead during
connection resets to sanitize and reconfigure the queues.
CVSS Score: 5.5 (MEDIUM)
CWE: CWE-401
References: https://git.kernel.org/stable/c/161ec2a0807ddd58bc0f24f3e1e7e3d4fef5297f; https://git.kernel.org/stable/c/72ea7fe0db73d65c7d977208842d8ade9b823de9; https://git.kernel.org/stable/c/9f23c499ca601b2a1e1d2e761d03964b739bca0e