From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE931C77B7A for ; Wed, 17 May 2023 09:33:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229957AbjEQJdi (ORCPT ); Wed, 17 May 2023 05:33:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40490 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229678AbjEQJdg (ORCPT ); Wed, 17 May 2023 05:33:36 -0400 X-Greylist: delayed 494 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Wed, 17 May 2023 02:33:34 PDT Received: from mail-m3169.qiye.163.com (mail-m3169.qiye.163.com [103.74.31.69]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D55092738 for ; Wed, 17 May 2023 02:33:34 -0700 (PDT) Received: from localhost.localdomain (unknown [218.94.118.90]) by mail-m3169.qiye.163.com (Hmail) with ESMTPA id 45F4B7A03D9; Wed, 17 May 2023 17:25:17 +0800 (CST) From: Zhen Ni To: minyard@acm.org Cc: linux-kernel@vger.kernel.org, Zhen Ni Subject: [PATCH] ipmi_watchdog: Fix read syscall not responding to signals during sleep Date: Wed, 17 May 2023 17:25:08 +0800 Message-Id: <20230517092508.369197-1-zhen.ni@easystack.cn> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFJQjdXWS1ZQUlXWQ8JGhUIEh9ZQVkaS0IeVhkfGUseTk8aSx9CTFUZERMWGhIXJBQOD1 lXWRgSC1lBWUlKQ1VCT1VKSkNVQktZV1kWGg8SFR0UWUFZT0tIVUpKS0hKQ1VKS0tVS1kG X-HM-Tid: 0a88290731d600a9kurm45f4b7a03d9 X-HM-MType: 1 X-HM-Sender-Digest: e1kMHhlZQR0aFwgeV1kSHx4VD1lBWUc6Pww6FAw4DzJDPxFMQzQePDUj OBEaFBdVSlVKTUNPSEpOTkpDS09CVTMWGhIXVQETHhVVFRI7HhoIAggPGhgQVRgVRVlXWRILWUFZ SUpDVUJPVUpKQ1VCS1lXWQgBWUFKTkxCNwY+ Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Read syscall cannot response to sigals when data_to_read remains at 0 and the while loop cannot break. Fix it. Signed-off-by: Zhen Ni --- drivers/char/ipmi/ipmi_watchdog.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c index 0d4a8dcacfd4..e7eb3e140444 100644 --- a/drivers/char/ipmi/ipmi_watchdog.c +++ b/drivers/char/ipmi/ipmi_watchdog.c @@ -807,13 +807,12 @@ static ssize_t ipmi_read(struct file *file, spin_unlock_irq(&ipmi_read_lock); schedule(); spin_lock_irq(&ipmi_read_lock); + if (signal_pending(current)) { + rv = -ERESTARTSYS; + break; + } } remove_wait_queue(&read_q, &wait); - - if (signal_pending(current)) { - rv = -ERESTARTSYS; - goto out; - } } data_to_read = 0; -- 2.20.1