Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp1653488ioo; Sun, 22 May 2022 23:07:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyOfaazuxx5kqePZDAVMoxeuoCQ6yEnwocoqb7tXUmhY4wIDDzwMXInidtZimQmCdMYZh0n X-Received: by 2002:a05:6a02:206:b0:399:3c9:f465 with SMTP id bh6-20020a056a02020600b0039903c9f465mr19609289pgb.388.1653286077549; Sun, 22 May 2022 23:07:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653286077; cv=none; d=google.com; s=arc-20160816; b=BDJclEoHT+ukn4rdO1ulYKQr1pzozjoKGkrKdqWIzl7Xuax5fclYMBb66LcbZ14Ye/ fu67lQW4k2IwDkvHdcMkSj/hqxS5jpDjtOEs36AjBxiquja3HH3pPEZNXPAkMs5CgxWo xBLsbEGDGBvcZOJmRa9dIxn0Bpmx4ocb1DFxT7cMSgYa/nOwRMeNDkqF8LG7oM1uGods FprYMY/xJ2SlvesBy07qGlmSR8VrazJ6uBGKPkdo4HKsyoLHEA7/RsDrPBWJrg4D/tEv MWVyOvNYPC5TcJWPj9fTDCs7vdvVnTMqTFZt2kANlxhcM5J+gXrycZlsAF2j3Y5as2qG 2qOw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=GoqSlRKn9Ifk2uCkGyMlKKdCtDlj6XpKz352rIyg3lA=; b=k7DulrdDPIfGFabESI1CyRVLnnxg75iLg/tJdUUTAPjNZ9bBK1ra8oBvFD78Qtqikz 33gOxpy6m7Lknpgh2PqI0YlbSQeACvihJPIWeaDSx/LfjHh9gK5Y57ryW3kBrjfYYdFl XvNICbI6DU7ltBLrjeurS77KR2/lnnc/dxn84NKmnMUlqRvwToFooQzyFg33NqFl7WYB krm2JZGMZHYHirZYHFG+3xp/JmkVsocCCPS1Vmh2Bu2bBLNRYUZILEZ5O+1BBrFaQ6kr Cjvo8MFJ9JV+HlU1YBO1uPKxddpSawrfgsaT2DFNJHrHH/jCJK+LHik3dH9paJeW9b6u H3+A== 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:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id d6-20020a63d706000000b003c19e2b283esi8820302pgg.494.2022.05.22.23.07.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 May 2022 23:07:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 8271E38791; Sun, 22 May 2022 22:58:57 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353558AbiEUHYR (ORCPT + 99 others); Sat, 21 May 2022 03:24:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54878 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354722AbiEUHYP (ORCPT ); Sat, 21 May 2022 03:24:15 -0400 Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8386D166683; Sat, 21 May 2022 00:24:13 -0700 (PDT) Received: from kwepemi100017.china.huawei.com (unknown [172.30.72.54]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4L4w2916rczCsjR; Sat, 21 May 2022 15:19:13 +0800 (CST) Received: from kwepemm600009.china.huawei.com (7.193.23.164) by kwepemi100017.china.huawei.com (7.221.188.163) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Sat, 21 May 2022 15:24:10 +0800 Received: from huawei.com (10.175.127.227) by kwepemm600009.china.huawei.com (7.193.23.164) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Sat, 21 May 2022 15:24:10 +0800 From: Yu Kuai To: , , , CC: , , , Subject: [PATCH -next v3 1/6] nbd: call genl_unregister_family() first in nbd_cleanup() Date: Sat, 21 May 2022 15:37:44 +0800 Message-ID: <20220521073749.3146892-2-yukuai3@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220521073749.3146892-1-yukuai3@huawei.com> References: <20220521073749.3146892-1-yukuai3@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemm600009.china.huawei.com (7.193.23.164) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RDNS_NONE, SPF_HELO_NONE,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 Otherwise there may be race between module removal and the handling of netlink command, which can lead to the oops as shown below: BUG: kernel NULL pointer dereference, address: 0000000000000098 Oops: 0002 [#1] SMP PTI CPU: 1 PID: 31299 Comm: nbd-client Tainted: G E 5.14.0-rc4 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996) RIP: 0010:down_write+0x1a/0x50 Call Trace: start_creating+0x89/0x130 debugfs_create_dir+0x1b/0x130 nbd_start_device+0x13d/0x390 [nbd] nbd_genl_connect+0x42f/0x748 [nbd] genl_family_rcv_msg_doit.isra.0+0xec/0x150 genl_rcv_msg+0xe5/0x1e0 netlink_rcv_skb+0x55/0x100 genl_rcv+0x29/0x40 netlink_unicast+0x1a8/0x250 netlink_sendmsg+0x21b/0x430 ____sys_sendmsg+0x2a4/0x2d0 ___sys_sendmsg+0x81/0xc0 __sys_sendmsg+0x62/0xb0 __x64_sys_sendmsg+0x1f/0x30 do_syscall_64+0x3b/0xc0 entry_SYSCALL_64_after_hwframe+0x44/0xae Modules linked in: nbd(E-) Signed-off-by: Hou Tao Signed-off-by: Yu Kuai --- drivers/block/nbd.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index ac8b045c777c..a73e853f5833 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -2528,6 +2528,12 @@ static void __exit nbd_cleanup(void) struct nbd_device *nbd; LIST_HEAD(del_list); + /* + * Unregister netlink interface prior to waiting + * for the completion of netlink commands. + */ + genl_unregister_family(&nbd_genl_family); + nbd_dbg_close(); mutex_lock(&nbd_index_mutex); @@ -2546,7 +2552,6 @@ static void __exit nbd_cleanup(void) destroy_workqueue(nbd_del_wq); idr_destroy(&nbd_index_idr); - genl_unregister_family(&nbd_genl_family); unregister_blkdev(NBD_MAJOR, "nbd"); } -- 2.31.1