🔍 CVE-2026-22981

5.5
CVSS Score
MEDIUM
2026-01-23
2026-11-05 22:17
✅ 완료

🇰🇷 한글 설명

Linux 커널 idpf 드라이버에서 리셋 처리 중 netdev 콜백 보호가 되지 않아 발생하는 문제를 수정한다. 리셋 중에는 netdev를 detach 후 close하고, 성공 시에만 attach 및 open하도록 변경되었다. 이로써 동시 리셋 시 vport 상태 손실과 리셋 실패 시 발생하는 NULL 포인터 역참조 커널 크래시가 방지된다.

💡 쉬운 설명

인텔 IDPF 네트워크 드라이버를 쓰는 리눅스 서버에서 장치 리셋 중 네트워크 인터페이스가 꺼진 상태로 남거나 커널이 멈추는 문제를 고친 패치입니다. 로컬 관리자 작업 중 발생할 수 있는 안정성 결함입니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: idpf: detach and close netdevs while handling a reset Protect the reset path from callbacks by setting the netdevs to detached state and close any netdevs in UP state until the reset handling has completed. During a reset, the driver will de-allocate resources for the vport, and there is no guarantee that those will recover, which is why the existing vport_ctrl_lock does not provide sufficient protection. idpf_detach_and_close() is called right before reset handling. If the reset handling succeeds, the netdevs state is recovered via call to idpf_attach_and_open(). If the reset handling fails the netdevs remain down. The detach/down calls are protected with RTNL lock to avoid racing with callbacks. On the recovery side the attach can be done without holding the RTNL lock as there are no callbacks expected at that point, due to detach/close always being done first in that flow. The previous logic restoring the netdevs state based on the IDPF_VPORT_UP_REQUESTED flag in the init task is not needed anymore, hence the removal of idpf_set_vport_state(). The IDPF_VPORT_UP_REQUESTED is still being used to restore the state of the netdevs following the reset, but has no use outside of the reset handling flow. idpf_init_hard_reset() is converted to void, since it was used as such and there is no error handling being done based on its return value. Before this change, invoking hard and soft resets simultaneously will cause the driver to lose the vport state: ip -br a <inf> UP echo 1 > /sys/class/net/ens801f0/device/reset& \ ethtool -L ens801f0 combined 8 ip -br a <inf> DOWN ip link set <inf> up ip -br a <inf> DOWN Also in case of a failure in the reset path, the netdev is left exposed to external callbacks, while vport resources are not initialized, leading to a crash on subsequent ifup/down: [408471.398966] idpf 0000:83:00.0: HW reset detected [408471.411744] idpf 0000:83:00.0: Device HW Reset initiated [408472.277901] idpf 0000:83:00.0: The driver was unable to contact the device's firmware. Check that the FW is running. Driver state= 0x2 [408508.125551] BUG: kernel NULL pointer dereference, address: 0000000000000078 [408508.126112] #PF: supervisor read access in kernel mode [408508.126687] #PF: error_code(0x0000) - not-present page [408508.127256] PGD 2aae2f067 P4D 0 [408508.127824] Oops: Oops: 0000 [#1] SMP NOPTI ... [408508.130871] RIP: 0010:idpf_stop+0x39/0x70 [idpf] ... [408508.139193] Call Trace: [408508.139637] <TASK> [408508.140077] __dev_close_many+0xbb/0x260 [408508.140533] __dev_change_flags+0x1cf/0x280 [408508.140987] netif_change_flags+0x26/0x70 [408508.141434] dev_change_flags+0x3d/0xb0 [408508.141878] devinet_ioctl+0x460/0x890 [408508.142321] inet_ioctl+0x18e/0x1d0 [408508.142762] ? _copy_to_user+0x22/0x70 [408508.143207] sock_do_ioctl+0x3d/0xe0 [408508.143652] sock_ioctl+0x10e/0x330 [408508.144091] ? find_held_lock+0x2b/0x80 [408508.144537] __x64_sys_ioctl+0x96/0xe0 [408508.144979] do_syscall_64+0x79/0x3d0 [408508.145415] entry_SYSCALL_64_after_hwframe+0x76/0x7e [408508.145860] RIP: 0033:0x7f3e0bb4caff

📍 영향받는 시스템

Linux 커널의 idpf 드라이버를 사용하는 Intel IPU/SmartNIC 기반 시스템 (수정 이전 커널 버전)

⚔️ 공격 벡터

로컬 관리자 권한 사용자가 장치 하드 리셋과 소프트 리셋(예: ethtool -L)을 동시에 수행하거나, 리셋 실패 상황에서 ifup/ifdown을 실행하여 커널 크래시 또는 인터페이스 상태 손실을 유발

🛡️ 대응 방법

Linux 커널을 본 CVE 패치가 포함된 상위 버전으로 업데이트하고 재부팅한다.

🔧 검증 코드

출력된 커널 버전이 배포판 보안 공지의 패치된 버전 이상인지 확인하고, idpf 모듈이 없으면 해당 드라이버를 사용하지 않는 시스템이므로 영향이 없다고 판단한다.

Shell / Script
uname -r && (modinfo idpf 2>/dev/null | grep -E '^(version|srcversion|filename)' || echo 'idpf 모듈 없음')

📊 CVSS Vector String

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

💻 영향받는 소프트웨어

Linux Kernel