CVE-2025-39828

Source
https://nvd.nist.gov/vuln/detail/CVE-2025-39828
Import Source
https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2025-39828.json
JSON Data
https://api.test.osv.dev/v1/vulns/CVE-2025-39828
Downstream
Related
Published
2025-09-16T13:00:26.433Z
Modified
2025-11-28T02:35:09.303548Z
Summary
atm: atmtcp: Prevent arbitrary write in atmtcp_recv_control().
Details

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

atm: atmtcp: Prevent arbitrary write in atmtcprecvcontrol().

syzbot reported the splat below. [0]

When atmtcpvopen() or atmtcpvclose() is called via connect() or close(), atmtcpsendcontrol() is called to send an in-kernel special message.

The message has ATMTCPHDRMAGIC in atmtcpcontrol.hdr.length. Also, a pointer of struct atmvcc is set to atmtcp_control.vcc.

The notable thing is struct atmtcp_control is uAPI but has a space for an in-kernel pointer.

struct atmtcpcontrol { struct atmtcphdr hdr; /* must be first / ... atm_kptr_t vcc; / both directions */ ... } _ATMAPI_ALIGN;

typedef struct { unsigned char [8]; } _ATMAPIALIGN atmkptrt;

The special message is processed in atmtcprecvcontrol() called from atmtcpcsend().

atmtcpcsend() is vcc->dev->ops->send() and called from 2 paths:

  1. .ndostartxmit() (vcc->send() == atmsendaal0())
  2. vcc_sendmsg()

The problem is sendmsg() does not validate the message length and userspace can abuse atmtcprecvcontrol() to overwrite any kptr by atmtcp_control.

Let's add a new ->pre_send() hook to validate messages from sendmsg().

KASAN: probably user-memory-access in range [0x0000000100000558-0x000000010000055f] CPU: 0 UID: 0 PID: 5865 Comm: syz-executor331 Not tainted 6.17.0-rc1-syzkaller-00215-gbab3ce404553 #0 PREEMPT(full) Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/12/2025 RIP: 0010:atmtcprecvcontrol drivers/atm/atmtcp.c:93 [inline] RIP: 0010:atmtcpcsend+0x1da/0x950 drivers/atm/atmtcp.c:297 Code: 4d 8d 75 1a 4c 89 f0 48 c1 e8 03 42 0f b6 04 20 84 c0 0f 85 15 06 00 00 41 0f b7 1e 4d 8d b7 60 05 00 00 4c 89 f0 48 c1 e8 03 <42> 0f b6 04 20 84 c0 0f 85 13 06 00 00 66 41 89 1e 4d 8d 75 1c 4c RSP: 0018:ffffc90003f5f810 EFLAGS: 00010203 RAX: 00000000200000ab RBX: 0000000000000000 RCX: 0000000000000000 RDX: ffff88802a510000 RSI: 00000000ffffffff RDI: ffff888030a6068c RBP: ffff88802699fb40 R08: ffff888030a606eb R09: 1ffff1100614c0dd R10: dffffc0000000000 R11: ffffffff8718fc40 R12: dffffc0000000000 R13: ffff888030a60680 R14: 000000010000055f R15: 00000000ffffffff FS: 00007f8d7e9236c0(0000) GS:ffff888125c1c000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 000000000045ad50 CR3: 0000000075bde000 CR4: 00000000003526f0 Call Trace: <TASK> vccsendmsg+0xa10/0xc60 net/atm/common.c:645 socksendmsgnosec net/socket.c:714 [inline] socksendmsg+0x219/0x270 net/socket.c:729 syssendmsg+0x505/0x830 net/socket.c:2614 _syssendmsg+0x21f/0x2a0 net/socket.c:2668 _syssendmsg net/socket.c:2700 [inline] _dosyssendmsg net/socket.c:2705 [inline] _sesyssendmsg net/socket.c:2703 [inline] _x64syssendmsg+0x19b/0x260 net/socket.c:2703 dosyscallx64 arch/x86/entry/syscall64.c:63 [inline] dosyscall64+0xfa/0x3b0 arch/x86/entry/syscall64.c:94 entrySYSCALL64afterhwframe+0x77/0x7f RIP: 0033:0x7f8d7e96a4a9 Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 51 18 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007f8d7e923198 EFLAGS: 00000246 ORIGRAX: 000000000000002e RAX: ffffffffffffffda RBX: 00007f8d7e9f4308 RCX: 00007f8d7e96a4a9 RDX: 0000000000000000 RSI: 0000200000000240 RDI: 0000000000000005 RBP: 00007f8d7e9f4300 R08: 65732f636f72702f R09: 65732f636f72702f R10: 65732f636f72702f R11: 0000000000000246 R12: 00007f8d7e9c10ac R13: 00007f8d7e9231a0 R14: 0000200000000200 R15: 0000200000000250 </TASK> Modules linked in:

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/39xxx/CVE-2025-39828.json"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2
Fixed
b502f16bad8f0a4cfbd023452766f21bfda39dde
Fixed
0a6a6d4fb333f7afe22e59ffed18511a7a98efc8
Fixed
62f368472b0aa4b5d91d9b983152855c6b6d8925
Fixed
51872b26429077be611b0a1816e0e722278015c3
Fixed
3c80c230d6e3e6f63d43f4c3f0bb344e3e8b119b
Fixed
33f9e6dc66b32202b95fc861e6b3ea4b0c185b0b
Fixed
3ab9f5ad9baefe6d3d4c37053cdfca2761001dfe
Fixed
ec79003c5f9d2c7f9576fc69b8dbda80305cbe3a

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
2.6.12
Fixed
5.4.298
Type
ECOSYSTEM
Events
Introduced
5.5.0
Fixed
5.10.242
Type
ECOSYSTEM
Events
Introduced
5.11.0
Fixed
5.15.191
Type
ECOSYSTEM
Events
Introduced
5.16.0
Fixed
6.1.150
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.6.104
Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.12.45
Type
ECOSYSTEM
Events
Introduced
6.13.0
Fixed
6.16.5