CVE-2026-46115 PUBLISHED

block: add pgmap check to biovec_phys_mergeable

Assigner: Linux
Reserved: 13.05.2026 Published: 28.05.2026 Updated: 30.05.2026

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

block: add pgmap check to biovec_phys_mergeable

biovec_phys_mergeable() is used by the request merge, DMA mapping, and integrity merge paths to decide if two physically contiguous bvec segments can be coalesced into one. It currently has no check for whether the segments belong to different dev_pagemaps.

When zone device memory is registered in multiple chunks, each chunk gets its own dev_pagemap. A single bio can legitimately contain bvecs from different pgmaps -- iov_iter_extract_bvecs() breaks at pgmap boundaries but the outer loop in bio_iov_iter_get_pages() continues filling the same bio. If such bvecs are physically contiguous, biovec_phys_mergeable() will coalesce them, making it impossible to recover the correct pgmap for the merged segment via page_pgmap().

Add a zone_device_pages_have_same_pgmap() check to prevent merging bvec segments that span different pgmaps.

Metrics

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

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from 49580e690755d0e51ed7aa2c33225dd884fa738a to 3d2ecbd444b01d6500671d1a582b7393943cf539 (excl.)
  • affected from 49580e690755d0e51ed7aa2c33225dd884fa738a to a7f3aa8c9df3905fe820ae36b67ba56b81587574 (excl.)
  • affected from 49580e690755d0e51ed7aa2c33225dd884fa738a to f17d521075325b8afc42d1baa1c28a5e9aca111f (excl.)
  • affected from 49580e690755d0e51ed7aa2c33225dd884fa738a to f632dab4b841554cd6416058c61886d7db176581 (excl.)
  • affected from 49580e690755d0e51ed7aa2c33225dd884fa738a to 13920e4b7b784b40cf4519ff1f0f3e513476a499 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 6.2 is affected
  • unaffected from 0 to 6.2 (excl.)
  • unaffected from 6.6.140 to 6.6.* (incl.)
  • unaffected from 6.12.88 to 6.12.* (incl.)
  • unaffected from 6.18.30 to 6.18.* (incl.)
  • unaffected from 7.0.7 to 7.0.* (incl.)
  • unaffected from 7.1-rc1 to * (incl.)

References