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

  jbd2: check 'jh->b_transaction' before removing it from checkpoint

  Following process will corrupt ext4 image:
  Step 1:
  jbd2_journal_commit_transaction
   __jbd2_journal_i…
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  jbd2: check 'jh->b_transaction' before removing it from checkpoint

  Following process will corrupt ext4 image:
  Step 1:
  jbd2_journal_commit_transaction
   __jbd2_journal_i…
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_kernel
affected:
  - 'linux_kernel >= 5.15.129, < 5.15.132'
  - 'linux_kernel >= 6.1.50, < 6.1.54'
  - 'linux_kernel >= 6.4.13, < 6.5'
  - 'linux_kernel >= 6.5.1, < 6.5.4'
  - linux_kernel = 6.5
patched:
  - linux_kernel 6.5.4
published: '2025-10-01'
updated: '2026-10-15'
sourceUpdated: '2026-10-15T22:17:42.257'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2023-53526'
references:
  - url: 'https://git.kernel.org/stable/c/2298f2589903a8bc03061b54b31fd97985ab6529'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/590a809ff743e7bd890ba5fb36bc38e20a36de53'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/dbafe636db415299e54d9dfefc1003bda9e71c9d'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/ef5fea70e5915afd64182d155e72bfb4f275e1fc'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
tags:
  - nvd
  - cve.org
epss: 0.00157
epssPercentile: 0.04831
ssvc:
  exploitation: none
  automatable: 'no'
  technicalImpact: total
  timestamp: '2026-10-15T21:35:25.230111Z'
ingestedAt: '2026-10-15T22:48:25.407Z'
---

## Overview

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

jbd2: check 'jh->b_transaction' before removing it from checkpoint

Following process will corrupt ext4 image:
Step 1:
jbd2_journal_commit_transaction
 __jbd2_journal_insert_checkpoint(jh, commit_transaction)
 // Put jh into trans1->t_checkpoint_list
 journal->j_checkpoint_transactions = commit_transaction
 // Put trans1 into journal->j_checkpoint_transactions

Step 2:
do_get_write_access
 test_clear_buffer_dirty(bh) // clear buffer dirty，set jbd dirty
 __jbd2_journal_file_buffer(jh, transaction) // jh belongs to trans2

Step 3:
drop_cache
 journal_shrink_one_cp_list
  jbd2_journal_try_remove_checkpoint
   if (!trylock_buffer(bh))  // lock bh, true
   if (buffer_dirty(bh))     // buffer is not dirty
   __jbd2_journal_remove_checkpoint(jh)
   // remove jh from trans1->t_checkpoint_list

Step 4:
jbd2_log_do_checkpoint
 trans1 = journal->j_checkpoint_transactions
 // jh is not in trans1->t_checkpoint_list
 jbd2_cleanup_journal_tail(journal)  // trans1 is done

Step 5: Power cut, trans2 is not committed, jh is lost in next mounting.

Fix it by checking 'jh->b_transaction' before remove it from checkpoint.

## Affected

- `linux_kernel >= 5.15.129, < 5.15.132`
- `linux_kernel >= 6.1.50, < 6.1.54`
- `linux_kernel >= 6.4.13, < 6.5`
- `linux_kernel >= 6.5.1, < 6.5.4`
- `linux_kernel = 6.5`

## Remediation

Upgrade past the affected range:

- `linux_kernel 6.5.4`
