CVE-2022-49456

CVE-2022-49456

High · published February 26, 2025

CVSS v3.1
7.8
EPSS
0%
Percentile
18.6
In the wild
Unconfirmed
What it is

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

bonding: fix missed rcu protection

When removing the rcu_read_lock in bond_ethtool_get_ts_info() as

discussed [1], I didn't notice it could be called via setsockopt,

which doesn't hold rcu lock, as syzbot pointed:

stack backtrace:

CPU: 0 PID: 3599 Comm: syz-executor317 Not tainted 5.18.0-rc5-syzkaller-01392-g01f4685797a5 #0

Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011

Call Trace:

<TASK>

__dump_stack lib/dump_stack.c:88 [inline]

dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106

bond_option_active_slave_get_rcu include/net/bonding.h:353 [inline]

bond_ethtool_get_ts_info+0x32c/0x3a0 drivers/net/bonding/bond_main.c:5595

__ethtool_get_ts_info+0x173/0x240 net/ethtool/common.c:554

ethtool_get_phc_vclocks+0x99/0x110 net/ethtool/common.c:568

sock_timestamping_bind_phc net/core/sock.c:869 [inline]

sock_set_timestamping+0x3a3/0x7e0 net/core/sock.c:916

sock_setsockopt+0x543/0x2ec0 net/core/sock.c:1221

__sys_setsockopt+0x55e/0x6a0 net/socket.c:2223

__do_sys_setsockopt net/socket.c:2238 [inline]

__se_sys_setsockopt net/socket.c:2235 [inline]

__x64_sys_setsockopt+0xba/0x150 net/socket.c:2235

do_syscall_x64 arch/x86/entry/common.c:50 [inline]

do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80

entry_SYSCALL_64_after_hwframe+0x44/0xae

RIP: 0033:0x7f8902c8eb39

Fix it by adding rcu_read_lock and take a ref on the real_dev.

Since dev_hold() and dev_put() can take NULL these days, we can

skip checking if real_dev exist.

[1] https://lore.kernel.org/netdev/27565.1642742439@famine/

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00272 · 18.6th percentile
Published
2025-02-26T12:01Z
Affected products (10)
ProductVersionsFixed in
linux/linux_kernel≥ 5.17.1, < 5.17.145.17.14
linux/linux_kernel≥ 5.18, < 5.18.35.18.3
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 (3)
EPSS history
Timeline
  • 26 FEB 02:13Z
    bonding: fix missed rcu protection
    cvelistv5