Get a Demo

Let's Patch It!

Book a short call with one our specialists, we'll walk you through how Endor Patches work, and ask you a few questions about your environment (like your primary programming languages and repository management). We'll also send you an email right after you fill out the form, feel free to reply with any questions you have in advance!

CVE

CVE-2026-46325

RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE
Back to all
CVE

CVE-2026-46325

RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE

In the Linux kernel, the following vulnerability has been resolved:

RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE

The current implementation incorrectly handles memory regions (MRs) with

page sizes different from the system PAGE_SIZE. The core issue is that

rxesetpage() is called with mr->page_size step increments, but the

page_list stores individual struct page pointers, each representing

PAGE_SIZE of memory.

ibsgto_page() has ensured that when i>=1 either

a) SG[i-1].dmaend and SG[i].dmaaddr are contiguous

or

b) SG[i-1].dmaend and SG[i].dmaaddr are mr->page_size aligned.

This leads to incorrect iova-to-va conversion in scenarios:

  1. pagesize < PAGESIZE (e.g., MR: 4K, system: 64K):

   ibmr->iova = 0x181800

   sg[0]: dma_addr=0x181800, len=0x800

   sg[1]: dma_addr=0x173000, len=0x1000

   Access iova = 0x181800 + 0x810 = 0x182010

   Expected VA: 0x173010 (second SG, offset 0x10)

   Before fix:

    • index = (0x182010 >> 12) - (0x181800 >> 12) = 1
    • page_offset = 0x182010 & 0xFFF = 0x10
    • xarray[1] stores system page base 0x170000
    • Resulting VA: 0x170000 + 0x10 = 0x170010 (wrong)
  1. pagesize > PAGESIZE (e.g., MR: 64K, system: 4K):

   ibmr->iova = 0x18f800

   sg[0]: dma_addr=0x18f800, len=0x800

   sg[1]: dma_addr=0x170000, len=0x1000

   Access iova = 0x18f800 + 0x810 = 0x190010

   Expected VA: 0x170010 (second SG, offset 0x10)

   Before fix:

    • index = (0x190010 >> 16) - (0x18f800 >> 16) = 1
    • page_offset = 0x190010 & 0xFFFF = 0x10
    • xarray[1] stores system page for dma_addr 0x170000
    • Resulting VA: system page of 0x170000 + 0x10 = 0x170010 (wrong)

Yi Zhang reported a kernel panic[1] years ago related to this defect.

Solution:

  1. Replace xarray with pre-allocated rxemrpage array for sequential

   indexing (all MR page indices are contiguous)

  1. Each rxemrpage stores both struct page* and offset within the

   system page

  1. Handle MR pagesize != PAGESIZE relationships:
  • pagesize > PAGESIZE: Split MR pages into multiple system pages
  • pagesize <= PAGESIZE: Store offset within system page
  1. Add boundary checks and compatibility validation

This ensures correct iova-to-va conversion regardless of MR page size

and system PAGE_SIZE relationship, while improving performance through

array-based sequential access.

Tests on 4K and 64K PAGE_SIZE hosts:

  • rdma-core/pytests

  $ ./build/bin/runtests.py  --dev eth0rxe

  • blktest:

  $ TIMEOUT=30 QUICKRUN=1 USERXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd

[1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/

Package Versions Affected

Package Version
patch Availability
No items found.

Automatically patch vulnerabilities without upgrading

Fix Without Upgrading
Detect compatible fix
Apply safe remediation
Fix with a single pull request

CVSS Version

Severity
Base Score
CVSS Version
Score Vector
C
H
U
9.8
-
3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
C
H
U
0
-
3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
C
H
U
-

Related Resources

No items found.

References

https://git.kernel.org/stable/c/12985e5915a0b8354796efadaaeb201eed115377, https://git.kernel.org/stable/c/409c2c5508f3d30627bea576f8676de523cb906e, https://git.kernel.org/stable/c/836f6c13c9674027793f720be3f15ecd2b90b6ca, https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/46xxx/CVE-2026-46325.json, https://nvd.nist.gov/vuln/detail/CVE-2026-46325, https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Severity

9.8

CVSS Score
0
10

Basic Information

Base CVSS
9.8
EPSS Probability
0.00347%
EPSS Percentile
0.27995%
Introduced Version
592627ccbdff0ec6fff00fc761142a76db750dd4,0,6.2.3,6.3.0,6.19.0
Fix Available
12985e5915a0b8354796efadaaeb201eed115377,6.3,6.18.14,6.19.4,6.8.0-137.137,6.8.0-1062.65,6.17.0-1019.19~24.04.1,6.8.0-1064.72,6.17.0-1021.21~24.04.1,6.8.0-1063.70,6.17.0-1018.18~24.04.1,6.8.0-1065.73,6.17.0-1020.22~24.04.1,6.8.0-1060.68,6.8.0-1047.51,6.17.0-40.40~24.04.1,6.8.0-1062.63,6.8.0-137.137.1,6.8.0-1060.63,6.17.0-1026.26,6.8.0-1060.63.1,6.8.0-1031.32,6.17.0-1028.28,6.8.0-1059.62,6.8.0-1034.35,6.8.0-1062.65~22.04.2,6.8.0-1064.72~22.04.1,6.8.0-1063.70~22.04.1,6.8.0-1065.73~22.04.1,6.8.0-138.138~22.04.1,6.8.0-1062.63~22.04.1,6.8.0-137.137.1~22.04.1,6.8.0-1060.63~22.04.1,6.8.0-1059.62~22.04.1,6.8.0-137.137~22.04.1,0

Fix Critical Vulnerabilities Instantly

Secure your app without upgrading.
Fix Without Upgrading