CVE-2024-35911: ice: fix memory corruption bug with suspend and rebuild
In the Linux kernel, the following vulnerability has been resolved:
ice: fix memory corruption bug with suspend and rebuild
The ice driver would previously panic after suspend. This is caused from the driver only calling the icevsifreeqvectors() function by itself, when it is suspending. Since commit b3e7b3a6ee92 ("ice: prevent NULL pointer deref during reload") the driver has zeroed out numqvectors, and only restored it in icevsicfgdef().
This further causes the icerebuild() function to allocate a zero length buffer, after which numqvectors is updated, and then the new value of numqvectors is used to index into the zero length buffer, which corrupts memory.
The fix entails making sure all the code referencing numqvectors only does so after it has been reset via icevsicfgdef().
I didn't perform a full bisect, but I was able to test against 6.1.77 kernel and that ice driver works fine for suspend/resume with no panic, so sometime since then, this problem was introduced.
Also clean up an un-needed init of a local variable in the function being modified.
PANIC from 6.8.0-rc1:
[1026674.915596] PM: suspend exit [1026675.664697] ice 0000:17:00.1: PTP reset successful [1026675.664707] ice 0000:17:00.1: 2755 msecs passed between update to cached PHC time [1026675.667660] ice 0000:b1:00.0: PTP reset successful [1026675.675944] ice 0000:b1:00.0: 2832 msecs passed between update to cached PHC time [1026677.137733] ixgbe 0000:31:00.0 ens787: NIC Link is Up 1 Gbps, Flow Control: None [1026677.190201] BUG: kernel NULL pointer dereference, address: 0000000000000010 [1026677.192753] ice 0000:17:00.0: PTP reset successful [1026677.192764] ice 0000:17:00.0: 4548 msecs passed between update to cached PHC time [1026677.197928] #PF: supervisor read access in kernel mode [1026677.197933] #PF: errorcode(0x0000) - not-present page [1026677.197937] PGD 1557a7067 P4D 0 [1026677.212133] ice 0000:b1:00.1: PTP reset successful [1026677.212143] ice 0000:b1:00.1: 4344 msecs passed between update to cached PHC time [1026677.212575] [1026677.243142] Oops: 0000 [#1] PREEMPT SMP NOPTI [1026677.247918] CPU: 23 PID: 42790 Comm: kworker/23:0 Kdump: loaded Tainted: G W 6.8.0-rc1+ #1 [1026677.257989] Hardware name: Intel Corporation M50CYP2SBSTD/M50CYP2SBSTD, BIOS SE5C620.86B.01.01.0005.2202160810 02/16/2022 [1026677.269367] Workqueue: ice iceservicetask [ice] [1026677.274592] RIP: 0010:icevsirebuildsetcoalesce+0x130/0x1e0 [ice] [1026677.281421] Code: 0f 84 3a ff ff ff 41 0f b7 74 ec 02 66 89 b0 22 02 00 00 81 e6 ff 1f 00 00 e8 ec fd ff ff e9 35 ff ff ff 48 8b 43 30 49 63 ed <41> 0f b7 34 24 41 83 c5 01 48 8b 3c e8 66 89 b7 aa 02 00 00 81 e6 [1026677.300877] RSP: 0018:ff3be62a6399bcc0 EFLAGS: 00010202 [1026677.306556] RAX: ff28691e28980828 RBX: ff28691e41099828 RCX: 0000000000188000 [1026677.314148] RDX: 0000000000000000 RSI: 0000000000000010 RDI: ff28691e41099828 [1026677.321730] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000 [1026677.329311] R10: 0000000000000007 R11: ffffffffffffffc0 R12: 0000000000000010 [1026677.336896] R13: 0000000000000000 R14: 0000000000000000 R15: ff28691e0eaa81a0 [1026677.344472] FS: 0000000000000000(0000) GS:ff28693cbffc0000(0000) knlGS:0000000000000000 [1026677.353000] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [1026677.359195] CR2: 0000000000000010 CR3: 0000000128df4001 CR4: 0000000000771ef0 [1026677.366779] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [1026677.374369] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [1026677.381952] PKRU: 55555554 [1026677.385116] Call Trace: [1026677.388023] <TASK> [1026677.390589] ? die+0x20/0x70 [1026677.394105] ? pagefaultoops+0x82/0x160 [1026677.398576] ? douseraddrfault+0x65/0x6a0 [1026677.403307] ? excpagefault+0x6a/0x150 [1026677.407694] ? asmexcpagefault+0x22/0x30 [1026677.412349] ? icevsirebuildsetcoalesce+0x130/0x1e0 [ice] [1026677.4186 ---truncated---
Other sources
In the Linux kernel, the following vulnerability has been resolved:
ice: fix memory corruption bug with suspend and rebuild
The Linux kernel CVE team has assigned CVE-2024-35911 to this issue.
Upstream advisory: https://lore.kernel.org/linux-cve-announce/2024051956-CVE-2024-35911-f6f9@gregkh/T
— Red Hat
Affected Software
Remediation
Event History
Frequently Asked Questions
What is the severity of CVE-2024-35911?
The severity of CVE-2024-35911 has not been explicitly listed but it involves memory corruption which can potentially lead to a system panic.
How do I fix CVE-2024-35911?
To fix CVE-2024-35911, upgrade the affected kernel version to 6.6.26, 6.8.5, 6.9, or specific Debian versions such as 5.10.223-1.
What software is affected by CVE-2024-35911?
CVE-2024-35911 affects the Linux kernel, specifically versions prior to 6.6.26, 6.8.5, 6.9, and select Debian kernel versions.
What is the nature of the vulnerability CVE-2024-35911?
CVE-2024-35911 is a memory corruption vulnerability caused by improper handling of the ice driver during system suspend.
Is CVE-2024-35911 exploitable?
While CVE-2024-35911 leads to a system panic, the exploitability largely depends on the specific environment and usage of the affected kernel versions.