9.1
/ 10
CRITICAL
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
Description
In the Linux kernel, the following vulnerability has been resolved:
RDMA/rxe: Validate pad and ICRC before payload_size() in rxe_rcv
rxe_rcv() currently checks only that the incoming packet is at least
header_size(pkt) bytes long before payload_size() is used.
However, payload_size() subtracts both the attacker-controlled BTH pad
field and RXE_ICRC_SIZE from pkt->paylen:
payload_size = pkt->paylen - offset[RXE_PAYLOAD] - bth_pad(pkt)
- RXE_ICRC_SIZE
This means a short packet can still make payload_size() underflow even
if it includes enough bytes for the fixed headers. Simply requiring
header_size(pkt) + RXE_ICRC_SIZE is not sufficient either, because a
packet with a forged non-zero BTH pad can still leave payload_size()
negative and pass an underflowed value to later receive-path users.
Fix this by validating pkt->paylen against the full minimum length
required by payload_size(): header_size(pkt) + bth_pad(pkt) +
RXE_ICRC_SIZE.
RDMA/rxe: Validate pad and ICRC before payload_size() in rxe_rcv
rxe_rcv() currently checks only that the incoming packet is at least
header_size(pkt) bytes long before payload_size() is used.
However, payload_size() subtracts both the attacker-controlled BTH pad
field and RXE_ICRC_SIZE from pkt->paylen:
payload_size = pkt->paylen - offset[RXE_PAYLOAD] - bth_pad(pkt)
- RXE_ICRC_SIZE
This means a short packet can still make payload_size() underflow even
if it includes enough bytes for the fixed headers. Simply requiring
header_size(pkt) + RXE_ICRC_SIZE is not sufficient either, because a
packet with a forged non-zero BTH pad can still leave payload_size()
negative and pass an underflowed value to later receive-path users.
Fix this by validating pkt->paylen against the full minimum length
required by payload_size(): header_size(pkt) + bth_pad(pkt) +
RXE_ICRC_SIZE.
Basic Information
ID
CVE-2026-46043
Source
Linux
Published
May 27, 2026 at 12:56
Modified
May 30, 2026 at 10:46
Affected Product
Vendor
Linux
Product
Linux
Version
8700e3e7c4857d28ebaa824509934556da0b3e76
Affected Versions
Linux Linux 8700e3e7c4857d28ebaa824509934556da0b3e76
Linux Linux 8700e3e7c4857d28ebaa824509934556da0b3e76
Linux Linux 8700e3e7c4857d28ebaa824509934556da0b3e76
Linux Linux 8700e3e7c4857d28ebaa824509934556da0b3e76
Linux Linux 8700e3e7c4857d28ebaa824509934556da0b3e76
Linux Linux 4.8
Linux Linux 8700e3e7c4857d28ebaa824509934556da0b3e76
Linux Linux 8700e3e7c4857d28ebaa824509934556da0b3e76
Linux Linux 8700e3e7c4857d28ebaa824509934556da0b3e76
Linux Linux 8700e3e7c4857d28ebaa824509934556da0b3e76
Linux Linux 4.8
References
- git.kernel.org /stable/c/2fd4f8b749309a61c3f3f88ee8891d94f79e1240
- git.kernel.org /stable/c/f83519a4c122c9c7a850a2197648a9ff4c67c520
- git.kernel.org /stable/c/9b924f3a26b21330a837cfe72e819b6393bbeeaa
- git.kernel.org /stable/c/e8ee0e792d475b1067c199ef0af1b6221fa6f43d
- git.kernel.org /stable/c/7244491dab347f648e661da96dc0febadd9daec3