---
id: CVE-2026-46094
title: 'ext4: fix bounds check in check_xattrs() to prevent out-of-bounds access'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  ext4: fix bounds check in check_xattrs() to prevent out-of-bounds access

  The bounds check for the next xattr entry in check_xattrs() uses
  (void *)next >= end, which al…
severity: none
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 3478c83cf26bbffd026ae6a56bcb1fe544f0834e <
    ab6da97bc310db35d4e4ef5354bc3ff626b0698c
  - >-
    Linux >= 3478c83cf26bbffd026ae6a56bcb1fe544f0834e <
    5a5314d2387633a272a04d1bd8727f99058e4e68
  - >-
    Linux >= 3478c83cf26bbffd026ae6a56bcb1fe544f0834e <
    537e065977022aa22f2c2503e8accaf16622e0fd
  - >-
    Linux >= 3478c83cf26bbffd026ae6a56bcb1fe544f0834e <
    520986722dbf869c122252123fc161c7302eab7d
  - >-
    Linux >= 3478c83cf26bbffd026ae6a56bcb1fe544f0834e <
    eceafc31ea7b42c984ece10d79d505c0bb6615d5
  - Linux 6.3
ssvc:
  exploitation: none
  automatable: 'no'
  technicalImpact: partial
  timestamp: '2026-11-06T16:08:29.750466Z'
published: '2026-05-27'
updated: '2026-11-06'
sourceUpdated: '2026-11-06T16:13:37.710Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-46094'
references:
  - url: 'https://git.kernel.org/stable/c/ab6da97bc310db35d4e4ef5354bc3ff626b0698c'
  - url: 'https://git.kernel.org/stable/c/5a5314d2387633a272a04d1bd8727f99058e4e68'
  - url: 'https://git.kernel.org/stable/c/537e065977022aa22f2c2503e8accaf16622e0fd'
  - url: 'https://git.kernel.org/stable/c/520986722dbf869c122252123fc161c7302eab7d'
  - url: 'https://git.kernel.org/stable/c/eceafc31ea7b42c984ece10d79d505c0bb6615d5'
tags:
  - cve.org
epss: 0.00125
epssPercentile: 0.02226
ingestedAt: '2026-11-06T16:57:43.338Z'
---

## Overview

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

ext4: fix bounds check in check_xattrs() to prevent out-of-bounds access

The bounds check for the next xattr entry in check_xattrs() uses
(void *)next >= end, which allows next to point within sizeof(u32)
bytes of end. On the next loop iteration, IS_LAST_ENTRY() reads 4
bytes via *(__u32 *)(entry), which can overrun the valid xattr region.

For example, if next lands at end - 1, the check passes since
next < end, but IS_LAST_ENTRY() reads 4 bytes starting at end - 1,
accessing 3 bytes beyond the valid region.

Fix this by changing the check to (void *)next + sizeof(u32) > end,
ensuring there is always enough space for the IS_LAST_ENTRY() read
on the subsequent iteration.

## Affected

- `Linux >= 3478c83cf26bbffd026ae6a56bcb1fe544f0834e < ab6da97bc310db35d4e4ef5354bc3ff626b0698c`
- `Linux >= 3478c83cf26bbffd026ae6a56bcb1fe544f0834e < 5a5314d2387633a272a04d1bd8727f99058e4e68`
- `Linux >= 3478c83cf26bbffd026ae6a56bcb1fe544f0834e < 537e065977022aa22f2c2503e8accaf16622e0fd`
- `Linux >= 3478c83cf26bbffd026ae6a56bcb1fe544f0834e < 520986722dbf869c122252123fc161c7302eab7d`
- `Linux >= 3478c83cf26bbffd026ae6a56bcb1fe544f0834e < eceafc31ea7b42c984ece10d79d505c0bb6615d5`
- `Linux 6.3`

## Remediation

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