CVE-2025-37858

Updated on 09 May 2025

Severity

5.5 Medium severity

Details

CVSS score
5.5
CVSS vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Overview

About vulnerability

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

fs/jfs: Prevent integer overflow in AG size calculation

The JFS filesystem calculates allocation group (AG) size using 1 « l2agsize in dbExtendFS(). When l2agsize exceeds 31 (possible with >2TB aggregates on 32-bit systems), this 32-bit shift operation causes undefined behavior and improper AG sizing.

On 32-bit architectures:

  • Left-shifting 1 by 32+ bits results in 0 due to integer overflow
  • This creates invalid AG sizes (0 or garbage values) in sbi->bmap->db_agsize
  • Subsequent block allocations would reference invalid AG structures
  • Could lead to:
  • Filesystem corruption during extend operations
  • Kernel crashes due to invalid memory accesses
  • Security vulnerabilities via malformed on-disk structures

Fix by casting to s64 before shifting: bmp->db_agsize = (s64)1 « l2agsize;

This ensures 64-bit arithmetic even on 32-bit architectures. The cast matches the data type of db_agsize (s64) and follows similar patterns in JFS block calculation code.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Details

Affected packages:
linux @ 4.15.0 (+16 more)

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

fs/jfs: Prevent integer overflow in AG size calculation

The JFS filesystem calculates allocation group (AG) size using 1 « l2agsize in dbExtendFS(). When l2agsize exceeds 31 (possible with >2TB aggregates on 32-bit systems), this 32-bit shift operation causes undefined behavior and improper AG sizing.

On 32-bit architectures:

  • Left-shifting 1 by 32+ bits results in 0 due to integer overflow
  • This creates invalid AG sizes (0 or garbage values) in sbi->bmap->db_agsize
  • Subsequent block allocations would reference invalid AG structures
  • Could lead to:
  • Filesystem corruption during extend operations
  • Kernel crashes due to invalid memory accesses
  • Security vulnerabilities via malformed on-disk structures

Fix by casting to s64 before shifting: bmp->db_agsize = (s64)1 « l2agsize;

This ensures 64-bit arithmetic even on 32-bit architectures. The cast matches the data type of db_agsize (s64) and follows similar patterns in JFS block calculation code.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes