CVE-2021-4454

CVE-2021-4454

High · published March 27, 2025

CVSS v3.1
7.5
EPSS
1%
Percentile
47.5
In the wild
Unconfirmed
What it is

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

can: j1939: fix errant WARN_ON_ONCE in j1939_session_deactivate

The conclusion "j1939_session_deactivate() should be called with a

session ref-count of at least 2" is incorrect. In some concurrent

scenarios, j1939_session_deactivate can be called with the session

ref-count less than 2. But there is not any problem because it

will check the session active state before session putting in

j1939_session_deactivate_locked().

Here is the concurrent scenario of the problem reported by syzbot

and my reproduction log.

cpu0 cpu1

j1939_xtp_rx_eoma

j1939_xtp_rx_abort_one

j1939_session_get_by_addr [kref == 2]

j1939_session_get_by_addr [kref == 3]

j1939_session_deactivate [kref == 2]

j1939_session_put [kref == 1]

j1939_session_completed

j1939_session_deactivate

WARN_ON_ONCE(kref < 2)

=====================================================

WARNING: CPU: 1 PID: 21 at net/can/j1939/transport.c:1088 j1939_session_deactivate+0x5f/0x70

CPU: 1 PID: 21 Comm: ksoftirqd/1 Not tainted 5.14.0-rc7+ #32

Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1 04/01/2014

RIP: 0010:j1939_session_deactivate+0x5f/0x70

Call Trace:

j1939_session_deactivate_activate_next+0x11/0x28

j1939_xtp_rx_eoma+0x12a/0x180

j1939_tp_recv+0x4a2/0x510

j1939_can_recv+0x226/0x380

can_rcv_filter+0xf8/0x220

can_receive+0x102/0x220

? process_backlog+0xf0/0x2c0

can_rcv+0x53/0xf0

__netif_receive_skb_one_core+0x67/0x90

? process_backlog+0x97/0x2c0

__netif_receive_skb+0x22/0x80

The record
Technical detail
CVSS v3.1
7.5 · HIGH
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00591 · 47.5th percentile
Published
2025-03-27T21:15Z
Affected products (16)
ProductVersionsFixed in
linux/linux_kernel≥ 5.4.138, < 5.4.2325.4.232
linux/linux_kernel≥ 5.10.56, < 5.10.1685.10.168
linux/linux_kernel≥ 5.13.8, < 5.145.14
linux/linux_kernel≥ 5.14.1, < 5.15.935.15.93
linux/linux_kernel≥ 5.16, < 6.1.116.1.11
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (5)
EPSS history
Timeline
  • 27 MAR 16:37Z
    can: j1939: fix errant WARN_ON_ONCE in j1939_session_deactivate
    cvelistv5