Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp457952yba; Wed, 15 May 2019 04:27:36 -0700 (PDT) X-Google-Smtp-Source: APXvYqwROaskaljRyVs5ciiEXlOEcjlZ/wlKlc9vuteKoter7T+cQ9ux8pdfIgpbcyq5r5NZWkyD X-Received: by 2002:a62:14d6:: with SMTP id 205mr46451788pfu.4.1557919656145; Wed, 15 May 2019 04:27:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557919656; cv=none; d=google.com; s=arc-20160816; b=CAc3WIMVPZrF2BF1zLTHkyswlPSPDENKfcJbCEt8vzKHZxUzuFSinWQl5gN+PDq9We LCCGuIxQyEyhIYJolfZP+z5kWxBVhbjRsCrxw8wtV9KxAZX13b8YlXSP56M/HTwAP4zu rdBmk6FDQdDD7zJxcaT1/Bphe8tPEfAnDEcp3WrxR23J7Y19/oGqOix+ShKq+IoF/mLD z5DD1xSjf9bmpuU9C78CTe9hGGEhVXuQlt6/h/3kU84eGLMwgkFMOBHatQBMMYR5K8+h z1DDJ2GLaU83O8AcO0M8gf/NQcAD2POxyPuDCMpd0QJtiBKl2uuNeKCsY7GUxjdu/wHS ybrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=tj7ROHej9oMTH0LohVepuPCHKaxPMKP6c3v3x5geYqg=; b=Sc/Rg7VpgvSeqD0m3V5LqLCMSnpqGWJKR0uwNVMs6jyRSVVqCetPScg5sW1JdNqbE1 /PXfP/CTFdlh5RVWbrZHheNmRdmfW9ptdE8tzsy5twzXTH71lV7sdCdVXOEw2OB6L8mE EGxqbNViXxvn03vSmRVdJSyMCAWGNnE/v8W9C2jXlkWgF81Hc+kjB8hMk01y1OLkO19s iPBSg7zmoTTKUtCN26q/qLH1EPE4by7dpHxlyZaOlMvQmbV5laiant3Mjl7Roj0YINt3 0ozlq3JN79YvjYwPXc6YT792H0jkpt5a1wuaSNYukxnDyhQeemB6WQQkeSO9kYq40JrT h4Rg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Ya0eMGPY; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f90si1585295plb.25.2019.05.15.04.27.21; Wed, 15 May 2019 04:27:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Ya0eMGPY; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731906AbfEOLZA (ORCPT + 99 others); Wed, 15 May 2019 07:25:00 -0400 Received: from mail.kernel.org ([198.145.29.99]:35588 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731902AbfEOLY5 (ORCPT ); Wed, 15 May 2019 07:24:57 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E41F320818; Wed, 15 May 2019 11:24:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557919496; bh=Q/CLjt7feT+ZdTMH8kb5Tanjx7cBjlDBsWMvqGIoQ60=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ya0eMGPYGMPzPlZvKLyJpt3aoWxBDoIKBsc19f6OuSRi+VxZAguIW0CW5Yjq4TZD7 185omVIiF2PM5MoNFzDcw7HWmasDCD9MWheyFBdeZPIE6uzJijk0nedDwsvQpmj3Zz FH/vSC3IKuyin+XMtKFVLlKj5PmrpAiZ1Am6q3v8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Hulk Robot , YueHaibing , "David S. Miller" Subject: [PATCH 4.19 098/113] packet: Fix error path in packet_init Date: Wed, 15 May 2019 12:56:29 +0200 Message-Id: <20190515090701.044735997@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190515090652.640988966@linuxfoundation.org> References: <20190515090652.640988966@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: YueHaibing [ Upstream commit 36096f2f4fa05f7678bc87397665491700bae757 ] kernel BUG at lib/list_debug.c:47! invalid opcode: 0000 [#1 CPU: 0 PID: 12914 Comm: rmmod Tainted: G W 5.1.0+ #47 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014 RIP: 0010:__list_del_entry_valid+0x53/0x90 Code: 48 8b 32 48 39 fe 75 35 48 8b 50 08 48 39 f2 75 40 b8 01 00 00 00 5d c3 48 89 fe 48 89 c2 48 c7 c7 18 75 fe 82 e8 cb 34 78 ff <0f> 0b 48 89 fe 48 c7 c7 50 75 fe 82 e8 ba 34 78 ff 0f 0b 48 89 f2 RSP: 0018:ffffc90001c2fe40 EFLAGS: 00010286 RAX: 000000000000004e RBX: ffffffffa0184000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: ffff888237a17788 RDI: 00000000ffffffff RBP: ffffc90001c2fe40 R08: 0000000000000000 R09: 0000000000000000 R10: ffffc90001c2fe10 R11: 0000000000000000 R12: 0000000000000000 R13: ffffc90001c2fe50 R14: ffffffffa0184000 R15: 0000000000000000 FS: 00007f3d83634540(0000) GS:ffff888237a00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000555c350ea818 CR3: 0000000231677000 CR4: 00000000000006f0 Call Trace: unregister_pernet_operations+0x34/0x120 unregister_pernet_subsys+0x1c/0x30 packet_exit+0x1c/0x369 [af_packet __x64_sys_delete_module+0x156/0x260 ? lockdep_hardirqs_on+0x133/0x1b0 ? do_syscall_64+0x12/0x1f0 do_syscall_64+0x6e/0x1f0 entry_SYSCALL_64_after_hwframe+0x49/0xbe When modprobe af_packet, register_pernet_subsys fails and does a cleanup, ops->list is set to LIST_POISON1, but the module init is considered to success, then while rmmod it, BUG() is triggered in __list_del_entry_valid which is called from unregister_pernet_subsys. This patch fix error handing path in packet_init to avoid possilbe issue if some error occur. Reported-by: Hulk Robot Signed-off-by: YueHaibing Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/packet/af_packet.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -4578,14 +4578,29 @@ static void __exit packet_exit(void) static int __init packet_init(void) { - int rc = proto_register(&packet_proto, 0); + int rc; - if (rc != 0) + rc = proto_register(&packet_proto, 0); + if (rc) goto out; + rc = sock_register(&packet_family_ops); + if (rc) + goto out_proto; + rc = register_pernet_subsys(&packet_net_ops); + if (rc) + goto out_sock; + rc = register_netdevice_notifier(&packet_netdev_notifier); + if (rc) + goto out_pernet; - sock_register(&packet_family_ops); - register_pernet_subsys(&packet_net_ops); - register_netdevice_notifier(&packet_netdev_notifier); + return 0; + +out_pernet: + unregister_pernet_subsys(&packet_net_ops); +out_sock: + sock_unregister(PF_PACKET); +out_proto: + proto_unregister(&packet_proto); out: return rc; }