Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp942354ioo; Sat, 21 May 2022 21:19:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyu8lzqtSEj6GXa1dSaHL3DT3qcyqLkNKE6lU/udm5Hppio4fM8jgL7kNrP11vrZ3Nw0MkY X-Received: by 2002:a17:902:a418:b0:161:f216:4f49 with SMTP id p24-20020a170902a41800b00161f2164f49mr10770038plq.129.1653193164497; Sat, 21 May 2022 21:19:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653193164; cv=none; d=google.com; s=arc-20160816; b=rbC7fBau3zVqXvZSO2bNUUjgS8VH65kUd8qfrFuZdXK0Hpnw53RisofwvSLHNRqC2x egxy4OcNBc6cWeQ+X+68zG2RVSq+UMHGFFWipi9oGCubOdoPabFgwkUMaoZhddC3/2VO 3wr4w3GjMRsn7iCc9P2I4XBZ+qKYiETSUPHk1/3jhD+Pa8qNKMR/oOFZrGm0PQBD1vMG 39EWwwyRU2ylAOhjjpajipl6SXyHmW8aBlSrznwqYnKd+ZyCcReIf29TdDevcJEnwq3j l5fZwuyr5IJFSLXAtEu44qTQEURuZ5MKa+DkFHlfOTsCR+a7dY2Qhb4zZgsFlAhjDPaK M28A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from; bh=un2FeA0480Shn/uCgv5lOA/KeVst/AI3TeLCGyLeew0=; b=kyOuBF+LOK0rCwzkt508gHmHTB8mxzagTz8lyrouoxnGF1kgleTajLVziO8DgMBLKV I7F2BMC7H0L/jxpq0TKDj/K9vftvqDDuc7lz4v+SdtbOB0PajOhJWSFtGj2H1p2nPE60 lexqMHnpfGfLn4bciXuLRWCSA2bk9y+Gs7bWRhVbr6RmnzfaBykLc8D1rLeR5to66T+W +SXyApS0iUr5MZgjd6ZMPpuktWJL0lS7i1P8mjflrgoee9VBntkmcXqsF8LxJNDL2pto hQ+WOdB9lt+1BoYCSQJBQ2NI7YH6ebaKCDv4CNv7gFS2tnBzMJ7U05dLI6248p3ajTxI R6qQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i17-20020a63d451000000b003daeb3ad0e3si5624865pgj.172.2022.05.21.21.19.04; Sat, 21 May 2022 21:19:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345814AbiETGQP (ORCPT + 99 others); Fri, 20 May 2022 02:16:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41854 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345791AbiETGQI (ORCPT ); Fri, 20 May 2022 02:16:08 -0400 Received: from azure-sdnproxy-2.icoremail.net (azure-sdnproxy.icoremail.net [52.175.55.52]) by lindbergh.monkeyblade.net (Postfix) with SMTP id 1DC933C488 for ; Thu, 19 May 2022 23:16:03 -0700 (PDT) Received: from ubuntu.localdomain (unknown [124.236.130.193]) by mail-app4 (Coremail) with SMTP id cS_KCgAnkCMOModigzl+AA--.18742S2; Fri, 20 May 2022 14:15:51 +0800 (CST) From: Duoming Zhou To: linux-staging@lists.linux.dev, gregkh@linuxfoundation.org Cc: davem@davemloft.net, kuba@kernel.org, alexander.deucher@amd.com, broonie@kernel.org, linux-kernel@vger.kernel.org, Duoming Zhou Subject: [PATCH] staging: rtl8192u: Fix sleep in atomic context bug in dm_fsync_timer_callback Date: Fri, 20 May 2022 14:15:41 +0800 Message-Id: <20220520061541.14785-1-duoming@zju.edu.cn> X-Mailer: git-send-email 2.17.1 X-CM-TRANSID: cS_KCgAnkCMOModigzl+AA--.18742S2 X-Coremail-Antispam: 1UD129KBjvJXoW7trWftF15CF13ur18Xw47Jwb_yoW8Aw1UpF WkC3WDCF48tFnF9w1kAw4vvryFk3Z7Ca4xGF9rZ345u3s5t3WUWFWYyFy0yr4UA3y5CFWF vFyYkr13Zr4DCr7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkS14x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26F4U JVW0owA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oV Cq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0 I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r 4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwCY02Avz4vE14v_GF1l 42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJV WUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r1q6r43MIIYrxkI7VAK I48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r 4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY 6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjfUndb1UUUUU X-CM-SenderInfo: qssqjiasttq6lmxovvfxof0/1tbiAgAQAVZdtZyoSgAEsX X-Spam-Status: No, score=-0.6 required=5.0 tests=BAYES_00, RCVD_IN_VALIDITY_RPBL,SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There are sleep in atomic context bugs when dm_fsync_timer_callback is executing. The root cause is that the memory allocation functions with GFP_KERNEL parameter are called in dm_fsync_timer_callback which is a timer handler. The call paths that could trigger bugs are shown below: (interrupt context) dm_fsync_timer_callback write_nic_byte kzalloc(sizeof(data), GFP_KERNEL); //may sleep write_nic_dword kzalloc(sizeof(data), GFP_KERNEL); //may sleep This patch changes allocation mode from GFP_KERNEL to GFP_ATOMIC in order to prevent atomic context sleeping. The GFP_ATOMIC flag makes memory allocation operation could be used in atomic context. Signed-off-by: Duoming Zhou --- drivers/staging/rtl8192u/r8192U_core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index ce807c9d421..679c362baad 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -267,7 +267,7 @@ int write_nic_byte(struct net_device *dev, int indx, u8 data) struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); struct usb_device *udev = priv->udev; - u8 *usbdata = kzalloc(sizeof(data), GFP_KERNEL); + u8 *usbdata = kzalloc(sizeof(data), GFP_ATOMIC); if (!usbdata) return -ENOMEM; @@ -319,7 +319,7 @@ int write_nic_dword(struct net_device *dev, int indx, u32 data) struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); struct usb_device *udev = priv->udev; - u32 *usbdata = kzalloc(sizeof(data), GFP_KERNEL); + u32 *usbdata = kzalloc(sizeof(data), GFP_ATOMIC); if (!usbdata) return -ENOMEM; -- 2.17.1