---
id: CVE-2026-93201
title: |-
  In the Linux kernel, the following vulnerability has been resolved:

  dm-pcache: validate seg_id fields from persistent memory

  cache_pos_decode(), cache_key_decode() and the last-kset branches of
  cache_replay(), the writeback worker and …
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  dm-pcache: validate seg_id fields from persistent memory

  cache_pos_decode(), cache_key_decode() and the last-kset branches of
  cache_replay(), the writeback worker and …
severity: high
cvss: 7.8
cvssVector: 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 1d57628ff95b32d5cfa8d8f50e07690c161e9cf0 <
    b4bf8af5e7d7db4c5e179e15017da55857761ac4
  - >-
    Linux >= 1d57628ff95b32d5cfa8d8f50e07690c161e9cf0 <
    90c990a68460d7b5720e5634cf650eccdf0f4098
  - Linux 6.18
published: '2026-09-17'
updated: '2026-09-18'
sourceUpdated: '2026-09-18T18:18:24.903'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-93201'
references:
  - url: 'https://git.kernel.org/stable/c/90c990a68460d7b5720e5634cf650eccdf0f4098'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/b4bf8af5e7d7db4c5e179e15017da55857761ac4'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
tags:
  - nvd
  - cve.org
epss: 0.00112
epssPercentile: 0.01556
ingestedAt: '2026-09-17T16:21:47.721Z'
---

## Overview

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

dm-pcache: validate seg_id fields from persistent memory

cache_pos_decode(), cache_key_decode() and the last-kset branches of
cache_replay(), the writeback worker and the GC worker take a cache
segment id from the cache device metadata and index cache->segments[]
with it without checking it against cache->n_segs. That metadata is only
CRC-protected with a fixed public seed, so whoever supplies the cache
device on a table load (CAP_SYS_ADMIN) controls the id; an out-of-range
value forms a wild pcache_cache_segment pointer that is dereferenced and
written through -- an out-of-bounds read and write driven by on-disk data.

Add cache_seg_id_valid() and reject an out-of-range id at each decode
site, failing the operation with -EIO instead of indexing past the array.
Bound the id against the initialized-segment count (cache_info.n_segs)
rather than the physical device total. A forged cache_info.n_segs below
seg_num otherwise leaves segments[cache_info.n_segs..seg_num) as zeroed
structs whose data pointer is NULL, so a forged id in that window would
still be dereferenced. A later patch guarantees cache_info.n_segs <=
seg_num, and a driver-created cache sets the two equal, so valid images
are unaffected.

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
