ipmi_watchdog: Fix read syscall not responding to signals during sleep
authorCorey Minyard <minyard@acm.org>
Wed, 17 May 2023 08:54:12 +0000 (16:54 +0800)
committerCorey Minyard <minyard@acm.org>
Thu, 18 May 2023 22:31:31 +0000 (17:31 -0500)
Read syscall cannot response to sigals when data_to_read remains at 0
and the while loop cannot break.  Check signal_pending in the loop.

Reported-by: Zhen Ni <zhen.ni@easystack.cn>
Message-Id: <20230517085412.367022-1-zhen.ni@easystack.cn>
Signed-off-by: Corey Minyard <minyard@acm.org>
drivers/char/ipmi/ipmi_watchdog.c

index 0d4a8dcacfd4b422210a716de97fdef3750e29fa..9a459257489f0d657dc4be7feebedfb716f789e4 100644 (file)
@@ -802,7 +802,7 @@ static ssize_t ipmi_read(struct file *file,
 
                init_waitqueue_entry(&wait, current);
                add_wait_queue(&read_q, &wait);
-               while (!data_to_read) {
+               while (!data_to_read && !signal_pending(current)) {
                        set_current_state(TASK_INTERRUPTIBLE);
                        spin_unlock_irq(&ipmi_read_lock);
                        schedule();