CVE-2024-42148·Kernel vulnerability
In the Linux kernel, the following vulnerability has been resolved: bnx2x: Fix multiple UBSAN array-index-out-of-bounds Fix UBSAN warnings that occur when using a system with 32 physical cpu cores or more, or when the user defines a number of Ethernet queues greater than or equal to FP_SB_MAX_E1x using the num_queues module parameter. Currently there is a read/write out of bounds that occurs on the array "struct stats_query_entry query" present inside the "bnx2x_fw_stats_req" struct in "drivers/net/ethernet/broadcom/bnx2x/bnx2x.h". Looking at the definition of the "struct stats_query_entry query" array: struct stats_query_entry query[FP_SB_MAX_E1x+ BNX2X_FIRST_QUEUE_QUERY_IDX]; FP_SB_MAX_E1x is defined as the maximum number of fast path interrupts and has a value of 16, while BNX2X_FIRST_QUEUE_QUERY_IDX has a value of 3 meaning the array has a total size of 19. Since accesses to "struct stats_query_entry query" are offset-ted by BNX2X_FIRST_QUEUE_QUERY_IDX, that means that the total number of Ethernet queues should not exceed FP_SB_MAX_E1x (16). However one of these queues is reserved for FCOE and thus the number of Ethernet queues should be set to [FP_SB_MAX_E1x -1] (15) if FCOE is enabled or [FP_SB_MAX_E1x] (16) if it is not. This is also described in a comment in the source code in drivers/net/ethernet/broadcom/bnx2x/bnx2x.h just above the Macro definition of FP_SB_MAX_E1x. Below is the part of this explanation that it important for this patch /* * The total number of L2 queues, MSIX vectors and HW contexts (CIDs) is * control by the number of fast-path status blocks supported by the * device (HW/FW). Each fast-path status block (FP-SB) aka non-default * status block represents an independent interrupts context that can * serve a regular L2 networking queue. However special L2 queues such * as the FCoE queue do not require a FP-SB and other components like * the CNIC may consume FP-SB reducing the number of possible L2 queues * * If the maximum number of FP-SB available is X then: * a. If CNIC is supported it consumes 1 FP-SB thus the max number of * regular L2 queues is Y=X-1 * b. In MF mode the actual number of L2 queues is Y= (X-1/MF_factor) * c. If the FCoE L2 queue is supported the actual number of L2 queues * is Y+1 * d. The number of irqs (MSIX vectors) is either Y+1 (one extra for * slow-path interrupts) or Y+2 if CNIC is supported (one additional * FP interrupt context for the CNIC). * e. The number of HW context (CID count) is always X or X+1 if FCoE * L2 queue is supported. The cid for the FCoE L2 queue is always X. */ However this driver also supports NICs that use the E2 controller which can handle more queues due to having more FP-SB represented by FP_SB_MAX_E2. Looking at the commits when the E2 support was added, it was originally using the E1x parameters: commit f2e0899f0f27 ("bnx2x: Add 57712 support"). Back then FP_SB_MAX_E2 was set to 16 the same as E1x. However the driver was later updated to take full advantage of the E2 instead of having it be limited to the capabilities of the E1x. But as far as we can tell, the array "stats_query_entry query" was still limited to using the FP-SB available to the E1x cards as part of an oversignt when the driver was updated to take full advantage of the E2, and now with the driver being aware of the greater queue size supported by E2 NICs, it causes the UBSAN warnings seen in the stack traces below. This patch increases the size of the "stats_query_entry query" array by replacing FP_SB_MAX_E1x with FP_SB_MAX_E2 to be large enough to handle both types of NICs. Stack traces: UBSAN: array-index-out-of-bounds in drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c:1529:11 index 20 is out of range for type 'stats_query_entry [19]' CPU: 12 PID: 858 Comm: systemd-network Not tainted 6.9.0-060900rc7-generic #202405052133 Hardware name: HP ProLiant DL360 Gen9/ProLiant DL360 ---truncated---
- Severity
- high
- Software
- Kernel
- Fixed in
- 6.9.9
- Published
How likely is exploitation
FIRST's Exploit Prediction Scoring System puts the probability of this CVE being exploited in the next 30 days at <0.1% — higher than 1% of all published CVEs. EPSS is an independent forecast of exploitation, not a severity rating: it says nothing about how much damage a successful attack does, which is what a CVSS score measures.
Read the two together. CVE-2024-42148 scores 7.8 on CVSS, so a successful attack would be serious — but at <0.1%, almost nobody is currently attempting it. That is a different situation from a flaw under mass exploitation, and it is usually the difference between patching on your next maintenance window and patching tonight.
Affected versions
From: 6.7
Until: 6.9.9
Fixed in: 6.9.9
How to fix this CVE
Update your Linux kernel to version 6.9.9 or later to resolve an array bounds overflow in the bnx2x Broadcom network driver. This vulnerability can cause system instability on servers with 32+ CPU cores or when configuring high queue counts. Apply the patch immediately to prevent kernel panics and potential privilege escalation.
sudo dnf update kernel kernel-develDefensia detects this vulnerability
How to check if you are affected
- Check installed kernel version: uname -r | grep -E '^(6\.[7-8]|6\.9\.[0-8])'
- Verify bnx2x driver is loaded: lsmod | grep bnx2x
- Check system CPU count to assess exposure: nproc --all
- Monitor kernel logs for UBSAN warnings: dmesg | grep -i 'ubsan\|array-index-out-of-bounds'
- Confirm patch applied: grep 'FP_SB_MAX_E2' /usr/src/linux-headers-*/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
FAQ
What is CVE-2024-42148?
This vulnerability is an array index out-of-bounds condition in the bnx2x Broadcom network driver that occurs when systems have 32+ physical CPU cores or when users configure Ethernet queue counts exceeding safe thresholds. The vulnerable stats query array was sized for E1x controllers but not properly expanded when E2 controller support was added, leading to memory access violations.
Is CVE-2024-42148 being actively exploited?
No, this vulnerability is not currently being actively exploited in the wild, nor has a public proof-of-concept exploit been released. However, it can still trigger kernel panics on vulnerable systems under specific hardware configurations.
What versions of Kernel are affected by CVE-2024-42148?
Linux kernel versions 6.7.0 through 6.9.8 are affected. Kernel 6.9.9 and later versions contain the fix. Older kernel series (6.6 and earlier) are not affected.
How do I check if my server is vulnerable to CVE-2024-42148?
Run 'uname -r' to check your kernel version; if it shows 6.7.x, 6.8.x, or 6.9.0-6.9.8, you are vulnerable. Additionally run 'lsmod | grep bnx2x' to confirm the affected driver is in use.
Does Defensia detect CVE-2024-42148?
Yes — Defensia's CVE advisory scanner compares installed kernel package versions against the NVD database. If a vulnerable Linux kernel is detected on a monitored server, CVE-2024-42148 will appear in your dashboard with remediation steps tailored to your distribution.
Related Kernel CVEs
References
- https://git.kernel.org/stable/c/0edae06b4c227bcfaf3ce21208d49191e1009d3b
- https://git.kernel.org/stable/c/134061163ee5ca4759de5c24ca3bd71608891ba7
- https://git.kernel.org/stable/c/8b17cec33892a66bbd71f8d9a70a45e2072ae84f
- https://git.kernel.org/stable/c/9504a1550686f53b0bab4cab31d435383b1ee2ce
- https://git.kernel.org/stable/c/b9ea38e767459111a511ed4fb74abc37db95a59d
Track CVEs across your fleet automatically
Defensia scans your Linux servers and tells you exactly which ones are running vulnerable versions — including CVE-2024-42148. Free for 1 server.
Get started free