Fixed
Created: Oct 23, 2025
Updated: Oct 24, 2025
Resolved Date: Oct 23, 2025
Found In Version: 10.23.30.1
Fix Version: 10.23.30.13
Severity: Standard
Applicable for: Wind River Linux LTS 23
Component/s: Kernel
In the Linux kernel, the following vulnerability has been resolved:[EOL][EOL]blk-iocost: use spin_lock_irqsave in adjust_inuse_and_calc_cost[EOL][EOL]adjust_inuse_and_calc_cost() use spin_lock_irq() and IRQ will be enabled[EOL]when unlock. DEADLOCK might happen if we have held other locks and disabled[EOL]IRQ before invoking it.[EOL][EOL]Fix it by using spin_lock_irqsave() instead, which can keep IRQ state[EOL]consistent with before when unlock.[EOL][EOL] ================================[EOL] WARNING: inconsistent lock state[EOL] 5.10.0-02758-g8e5f91fd772f #26 Not tainted[EOL] --------------------------------[EOL] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage.[EOL] kworker/2:3/388 [HC0[0]:SC0[0]:HE0:SE1] takes:[EOL] ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: spin_lock_irq[EOL] ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: bfq_bio_merge+0x141/0x390[EOL] {IN-HARDIRQ-W} state was registered at:[EOL] __lock_acquire+0x3d7/0x1070[EOL] lock_acquire+0x197/0x4a0[EOL] __raw_spin_lock_irqsave[EOL] _raw_spin_lock_irqsave+0x3b/0x60[EOL] bfq_idle_slice_timer_body[EOL] bfq_idle_slice_timer+0x53/0x1d0[EOL] __run_hrtimer+0x477/0xa70[EOL] __hrtimer_run_queues+0x1c6/0x2d0[EOL] hrtimer_interrupt+0x302/0x9e0[EOL] local_apic_timer_interrupt[EOL] __sysvec_apic_timer_interrupt+0xfd/0x420[EOL] run_sysvec_on_irqstack_cond[EOL] sysvec_apic_timer_interrupt+0x46/0xa0[EOL] asm_sysvec_apic_timer_interrupt+0x12/0x20[EOL] irq event stamp: 837522[EOL] hardirqs last enabled at (837521): [<ffffffff84b9419d>] __raw_spin_unlock_irqrestore[EOL] hardirqs last enabled at (837521): [<ffffffff84b9419d>] _raw_spin_unlock_irqrestore+0x3d/0x40[EOL] hardirqs last disabled at (837522): [<ffffffff84b93fa3>] __raw_spin_lock_irq[EOL] hardirqs last disabled at (837522): [<ffffffff84b93fa3>] _raw_spin_lock_irq+0x43/0x50[EOL] softirqs last enabled at (835852): [<ffffffff84e00558>] __do_softirq+0x558/0x8ec[EOL] softirqs last disabled at (835845): [<ffffffff84c010ff>] asm_call_irq_on_stack+0xf/0x20[EOL][EOL] other info that might help us debug this:[EOL] Possible unsafe locking scenario:[EOL][EOL] CPU0[EOL] ----[EOL] lock(&bfqd->lock);[EOL] <Interrupt>[EOL] lock(&bfqd->lock);[EOL][EOL] *** DEADLOCK ***[EOL][EOL] 3 locks held by kworker/2:3/388:[EOL] #0: ffff888107af0f38 ((wq_completion)kthrotld){+.+.}-{0:0}, at: process_one_work+0x742/0x13f0[EOL] #1: ffff8881176bfdd8 ((work_completion)(&td->dispatch_work)){+.+.}-{0:0}, at: process_one_work+0x777/0x13f0[EOL] #2: ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: spin_lock_irq[EOL] #2: ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: bfq_bio_merge+0x141/0x390[EOL][EOL] stack backtrace:[EOL] CPU: 2 PID: 388 Comm: kworker/2:3 Not tainted 5.10.0-02758-g8e5f91fd772f #26[EOL] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014[EOL] Workqueue: kthrotld blk_throtl_dispatch_work_fn[EOL] Call Trace:[EOL] __dump_stack lib/dump_stack.c:77 [inline][EOL] dump_stack+0x107/0x167[EOL] print_usage_bug[EOL] valid_state[EOL] mark_lock_irq.cold+0x32/0x3a[EOL] mark_lock+0x693/0xbc0[EOL] mark_held_locks+0x9e/0xe0[EOL] __trace_hardirqs_on_caller[EOL] lockdep_hardirqs_on_prepare.part.0+0x151/0x360[EOL] trace_hardirqs_on+0x5b/0x180[EOL] __raw_spin_unlock_irq[EOL] _raw_spin_unlock_irq+0x24/0x40[EOL] spin_unlock_irq[EOL] adjust_inuse_and_calc_cost+0x4fb/0x970[EOL] ioc_rqos_merge+0x277/0x740[EOL] __rq_qos_merge+0x62/0xb0[EOL] rq_qos_merge[EOL] bio_attempt_back_merge+0x12c/0x4a0[EOL] blk_mq_sched_try_merge+0x1b6/0x4d0[EOL] bfq_bio_merge+0x24a/0x390[EOL] __blk_mq_sched_bio_merge+0xa6/0x460[EOL] blk_mq_sched_bio_merge[EOL] blk_mq_submit_bio+0x2e7/0x1ee0[EOL] __submit_bio_noacct_mq+0x175/0x3b0[EOL] submit_bio_noacct+0x1fb/0x270[EOL] blk_throtl_dispatch_work_fn+0x1ef/0x2b0[EOL] process_one_work+0x83e/0x13f0[EOL] process_scheduled_works[EOL] worker_thread+0x7e3/0xd80[EOL] kthread+0x353/0x470[EOL] ret_from_fork+0x1f/0x30