Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp704221pxb; Mon, 25 Oct 2021 17:02:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJybxZGFJeKy006XCoz5ZXFo8oUSMSNAWwEfGMHyWjdc8bZx3nfgTkFGqTooF3bsq4thjntH X-Received: by 2002:a17:907:2d20:: with SMTP id gs32mr15200273ejc.472.1635206564144; Mon, 25 Oct 2021 17:02:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635206564; cv=none; d=google.com; s=arc-20160816; b=dBVt0H4YRBegxDWGlogf+FovzGjhxJpmbjzkoL++cLm6a3fE2a5UoyHd8NOGIiOYHE 0wzuNaTXpffie8hslXufSah827RT+jgjtcpqBvQiswSAWryZV0p4sh3VvDD8cJH8xVgz e+M+9085R1XabSUQaZ0HmTlNaGeZChFQwjUChU3O1yn2rjbLCEkvqhLcIhAO0nC7e1dc oXTTBiUT56vNMhxO4aOCL5JGFx3J6oizfLodnl86CkyO8epcw6wcrAyk8SrNM0jD+EKn Db/MxMezAzsNUTfu1kZxr9bwkgwAvIkz0zf2e1p/2i1rBz08QlOhOCUQgDCPE5agiWAt m5Fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=GzMa1XYyKVzzJ/lrV/XAk5KJqqQFeJLx/wr/szp4Jlo=; b=rDmxmvDqInNHsB1xUlYZxAgOO+U5Na0GCNa2qnUicnEkjQbWslSoLOCiHeZlAvtAZE /Mv3DIdTW4fjTGgc21K6M6qibgo8g9OF24qaB4EPF64XeFKCNHcLjkQ2oVGxuFOmgtHZ bsWuvwBtbc1zhgMCvomQ8fH1pvvcxkVjlMreJEZrEcL2g2oiYUd86eDM69/yliFqzygR ViuvgOsy76Sw9//SsFKcme5NKxTmaWCD+YCKl2QTXwZXQ3ZFNFhNtmhszD4RC09KPo2c qw1AAeFOeengN35w27FsiC+4/diL0Licbb21keeqIPQNtqFaCF6vptcbguMr07k9B06Y 4Vvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vEffDeLM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q5si14231880ejb.580.2021.10.25.17.02.09; Mon, 25 Oct 2021 17:02:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vEffDeLM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237704AbhJYToI (ORCPT + 99 others); Mon, 25 Oct 2021 15:44:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:52126 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236190AbhJYThA (ORCPT ); Mon, 25 Oct 2021 15:37:00 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 303C161106; Mon, 25 Oct 2021 19:33:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1635190433; bh=AUqUU8MogCa7JJnv8XVEV8H16bZRliFWnzCQozhgL3o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vEffDeLMoNTpME50e1DrSsmOm7Z2hieb5b0ZUuF6slUCryMdjI1/NgcKJeH5X33h+ QStt9mTghiFYEKfqPvqpFceKV8xwQgjgiUPvc/Y/CfaYCGNzs+ObVR4U6xONindbZI N1NvdngZG3T90XQsSHj4NZeQQ0OXy0pHzx4BGaKU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Zheyu Ma , "David S. Miller" , Sasha Levin Subject: [PATCH 5.10 75/95] isdn: mISDN: Fix sleeping function called from invalid context Date: Mon, 25 Oct 2021 21:15:12 +0200 Message-Id: <20211025191007.817353181@linuxfoundation.org> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211025190956.374447057@linuxfoundation.org> References: <20211025190956.374447057@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Zheyu Ma [ Upstream commit 6510e80a0b81b5d814e3aea6297ba42f5e76f73c ] The driver can call card->isac.release() function from an atomic context. Fix this by calling this function after releasing the lock. The following log reveals it: [ 44.168226 ] BUG: sleeping function called from invalid context at kernel/workqueue.c:3018 [ 44.168941 ] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 5475, name: modprobe [ 44.169574 ] INFO: lockdep is turned off. [ 44.169899 ] irq event stamp: 0 [ 44.170160 ] hardirqs last enabled at (0): [<0000000000000000>] 0x0 [ 44.170627 ] hardirqs last disabled at (0): [] copy_process+0x132d/0x3e00 [ 44.171240 ] softirqs last enabled at (0): [] copy_process+0x135a/0x3e00 [ 44.171852 ] softirqs last disabled at (0): [<0000000000000000>] 0x0 [ 44.172318 ] Preemption disabled at: [ 44.172320 ] [] nj_release+0x69/0x500 [netjet] [ 44.174441 ] Call Trace: [ 44.174630 ] dump_stack_lvl+0xa8/0xd1 [ 44.174912 ] dump_stack+0x15/0x17 [ 44.175166 ] ___might_sleep+0x3a2/0x510 [ 44.175459 ] ? nj_release+0x69/0x500 [netjet] [ 44.175791 ] __might_sleep+0x82/0xe0 [ 44.176063 ] ? start_flush_work+0x20/0x7b0 [ 44.176375 ] start_flush_work+0x33/0x7b0 [ 44.176672 ] ? trace_irq_enable_rcuidle+0x85/0x170 [ 44.177034 ] ? kasan_quarantine_put+0xaa/0x1f0 [ 44.177372 ] ? kasan_quarantine_put+0xaa/0x1f0 [ 44.177711 ] __flush_work+0x11a/0x1a0 [ 44.177991 ] ? flush_work+0x20/0x20 [ 44.178257 ] ? lock_release+0x13c/0x8f0 [ 44.178550 ] ? __kasan_check_write+0x14/0x20 [ 44.178872 ] ? do_raw_spin_lock+0x148/0x360 [ 44.179187 ] ? read_lock_is_recursive+0x20/0x20 [ 44.179530 ] ? __kasan_check_read+0x11/0x20 [ 44.179846 ] ? do_raw_spin_unlock+0x55/0x900 [ 44.180168 ] ? ____kasan_slab_free+0x116/0x140 [ 44.180505 ] ? _raw_spin_unlock_irqrestore+0x41/0x60 [ 44.180878 ] ? skb_queue_purge+0x1a3/0x1c0 [ 44.181189 ] ? kfree+0x13e/0x290 [ 44.181438 ] flush_work+0x17/0x20 [ 44.181695 ] mISDN_freedchannel+0xe8/0x100 [ 44.182006 ] isac_release+0x210/0x260 [mISDNipac] [ 44.182366 ] nj_release+0xf6/0x500 [netjet] [ 44.182685 ] nj_remove+0x48/0x70 [netjet] [ 44.182989 ] pci_device_remove+0xa9/0x250 Signed-off-by: Zheyu Ma Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/isdn/hardware/mISDN/netjet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c index 2a1ddd47a096..a52f275f8263 100644 --- a/drivers/isdn/hardware/mISDN/netjet.c +++ b/drivers/isdn/hardware/mISDN/netjet.c @@ -949,8 +949,8 @@ nj_release(struct tiger_hw *card) nj_disable_hwirq(card); mode_tiger(&card->bc[0], ISDN_P_NONE); mode_tiger(&card->bc[1], ISDN_P_NONE); - card->isac.release(&card->isac); spin_unlock_irqrestore(&card->lock, flags); + card->isac.release(&card->isac); release_region(card->base, card->base_s); card->base_s = 0; } -- 2.33.0