CVE-2022-49941 in Linux정보

요약

\~에 의해 VulDB • 2026. 05. 25.

리눅스 커널에서 다음 취약점이 해결되었습니다:

tty: n_gsm: 원자적 컨텍스트에서 수면(sleeping) 함수 호출 방지

Syzkaller에서 다음과 같은 문제가 보고되었습니다:

BUG: sleeping function called from invalid context at kernel/printk/printk.c:2347 in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 1105, name: syz-executor423 syz-executor423/1105에서 획득한 잠금(lock) 3개: #0: ffff8881468b9098 (&tty->ldisc_sem){++++}-{0:0}, at: tty_ldisc_ref_wait+0x22/0x90 drivers/tty/tty_ldisc.c:266
#1: ffff8881468b9130 (&tty->atomic_write_lock){+.+.}-{3:3}, at: tty_write_lock drivers/tty/tty_io.c:952 [inline]
#1: ffff8881468b9130 (&tty->atomic_write_lock){+.+.}-{3:3}, at: do_tty_write drivers/tty/tty_io.c:975 [inline]
#1: ffff8881468b9130 (&tty->atomic_write_lock){+.+.}-{3:3}, at: file_tty_write.constprop.0+0x2a8/0x8e0 drivers/tty/tty_io.c:1118
#2: ffff88801b06c398 (&gsm->tx_lock){....}-{2:2}, at: gsmld_write+0x5e/0x150 drivers/tty/n_gsm.c:2717
irq 이벤트 타임스탬프: 3482 하드 IRQ 마지막 활성화 위치 (3481): [] __get_reqs_available+0x143/0x2f0 fs/aio.c:946
하드 IRQ 마지막 비활성화 위치 (3482): [] __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:108 [inline]
하드 IRQ 마지막 비활성화 위치 (3482): [] _raw_spin_lock_irqsave+0x3c/0x60 kernel/locking/spinlock.c:159
소프트 IRQ 마지막 활성화 위치 (3482): [] __do_softirq+0x133/0x4e0 kernel/softirq/softirq.c:922
소프트 IRQ 마지막 비활성화 위치 (3482): [] irq_exit_rcu kernel/softirq/softirq.c:1100 [inline]
소프트 IRQ 마지막 비활성화 위치 (3482): [] __irqentry_text_end+0x17b/0x180 arch/x86/entry/common.c:142
CPU: 0 PID: 1105 Comm: syz-executor423 Not tainted 6.1.0-rc6-syzkaller #0 Call Trace: __dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x57/0x7f lib/dump_stack.c:126 ___might_sleep.cold+0x1e8/0x22e kernel/sched/core.c:7304 console_lock+0x19/0x80 kernel/printk/printk.c:2347 do_con_write+0x113/0x1de0 drivers/tty/vt/vt.c:2909 con_write+0x22/0xc0 drivers/tty/vt/vt.c:3296 gsmld_write+0xd0/0x150 drivers/tty/n_gsm.c:2720 do_tty_write drivers/tty/tty_io.c:1028 [inline]
file_tty_write.constprop.0+0x502/0x8e0 drivers/tty/tty_io.c:1118 call_write_iter include/linux/fs.h:1903 [inline]
aio_write+0x355/0x7b0 fs/aio.c:1580 __io_submit_one fs/aio.c:1952 [inline]
io_submit_one+0xf45/0x1a90 fs/aio.c:1999 __do_sys_io_submit fs/aio.c:2058 [inline]
__se_sys_io_submit fs/aio.c:2028 [inline]
__x64_sys_io_submit+0x18c/0x2f0 fs/aio.c:2028 do_syscall_64+0x33/0x40 arch/x86/entry/common.c:46 entry_SYSCALL_64_after_hwframe+0x61/0xc6

다음 제어 흐름에서 문제가 발생합니다:

gsmld_write(...) spin_lock_irqsave(&gsm->tx_lock, flags) // TX 데이터에 대한 스핀락 획득 con_write(...) do_con_write(...) console_lock() might_sleep() // -> 버그

console_lock()은 수면(sleep)할 수 있으므로, 스핀락이 유지된 상태에서는 호출되어서는 안 됩니다.

이 문제를 해결하기 위해 패치는 tx_lock 스핀락을 뮤텍스로 대체합니다.

Linux Verification Center(linuxtesting.org)의 Syzkaller를 통해 발견되었습니다.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!