CVE-2026-46325

Source
https://cve.org/CVERecord?id=CVE-2026-46325
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-46325.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-46325
Downstream
ALSA (1)
AZL (1)
BELL (1)
CGA (5)
DEBIAN (1)
OESA (2)
RHSA (1)
RLSA (1)
ROOT (2)
UBUNTU (1)
Related
Published
2026-06-09T12:25:52Z
Modified
2026-10-28T02:30:31Z
Severity
  • 9.8 (Critical) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H CVSS Calculator
Summary
RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE
Details

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 rxe_set_page() is called with mr->page_size step increments, but the page_list stores individual struct page pointers, each representing PAGE_SIZE of memory.

ib_sg_to_page() has ensured that when i>=1 either a) SG[i-1].dma_end and SG[i].dma_addr are contiguous or b) SG[i-1].dma_end and SG[i].dma_addr are mr->page_size aligned.

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

  1. page_size < PAGE_SIZE (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)
  2. page_size > PAGE_SIZE (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 rxe_mr_page array for sequential indexing (all MR page indices are contiguous)
  2. Each rxe_mr_page stores both struct page* and offset within the system page
  3. Handle MR page_size != PAGE_SIZE relationships:
    • page_size > PAGE_SIZE: Split MR pages into multiple system pages
    • page_size <= PAGE_SIZE: Store offset within system page
  4. 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/run_tests.py --dev eth0_rxe
  • blktest: $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd

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

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/46xxx/CVE-2026-46325.json"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
592627ccbdff0ec6fff00fc761142a76db750dd4
Fixed
e327021bd73b134c18167e2cd2a52eb5597fcba6
Fixed
2a585a08a43c568ed6e9f27a97fd3d95106b9e68
Fixed
409c2c5508f3d30627bea576f8676de523cb906e
Fixed
836f6c13c9674027793f720be3f15ecd2b90b6ca
Fixed
12985e5915a0b8354796efadaaeb201eed115377
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
6.2.3
Fixed
6.3
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
0e443760b8b7b1e6723f4408afa056b2bc4fea12

Affected versions

v6.*
v6.2.10
v6.2.11
v6.2.12
v6.2.13
v6.2.14
v6.2.15
v6.2.16
v6.2.3
v6.2.4
v6.2.5
v6.2.6
v6.2.7
v6.2.8
v6.2.9

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-46325.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
6.3.0
Fixed
6.6.160
Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.12.114
Type
ECOSYSTEM
Events
Introduced
6.13.0
Fixed
6.18.14
Type
ECOSYSTEM
Events
Introduced
6.19.0
Fixed
6.19.4

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-46325.json"