Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp506971yba; Wed, 15 May 2019 05:20:13 -0700 (PDT) X-Google-Smtp-Source: APXvYqzdoXS6P6aUrRlqa22WgNNBhYb2pJPMfcHxroq4GURVeZDCFUmC/fx8V4gwzPdUjLSBLPMu X-Received: by 2002:a62:6444:: with SMTP id y65mr47330495pfb.148.1557922813452; Wed, 15 May 2019 05:20:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557922813; cv=none; d=google.com; s=arc-20160816; b=IPy8QR/AYFkFYGfOf6kXXqKOSlK85Hz6l+DhqwfKe7yL4JZp99Cs05nE5+Yr7mNWiw 97o+ilvla4L0TdXhB9s5uAimNG8DxSMAxNgenzM669b2mPVJwTbhWcOMHlPoKY3WPXEi SlrFp7OCP3V7GChYYRFERx4/CIJ27UZSgZRzGvTAKMXQpF9lZVHUe23DqhoHugJ5GQ+H n1x3+KjO19LMaJLNYMBBXj72uNAFWJcggkhMUx3W7ej0LLuRQjmS6b65gkt5cJLsgHoJ K5FwBCdZn4p5sXgDfNiIXDdDhy/6o78F2VDTrRuSyocsTqlbu4r4OOue9vl44Su7CUno 9Hww== 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=EAzm5E6nMZ4OeAmMcJKOHEpCprhaxcXfIXdxmujdU50=; b=mlLPJNbWice73hDM7yRLcz7NFgyRf+lNUsL1keOAn4B56LVQIwCnZ53kg3Uy5qJLww eyBtaIXEYIY4yuGjjTL1rwhU2W156oDYLw223SfcidAQ/S9jgQfBJMIrz6U/otm63FFV ZDhNgWeDhU01iUp5QEgWDLhobRtt3qz8jCI2rNQoWQuOzA8GqV8mfY3kE0RMNIxLrw/R 30bWB+4x54UaymzzFwmXviABdNw9LVs4RbPsfBCBBD8Qi+7SHb4wrzdRueIt3u1z7v34 lbRmT2wDY8Pi8fsW8Rw+IlWC6XV1s1ZGC8VdE9l6WiaDgNtFc1L2HMRKlOhW5V5SJ6Qc fAwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=iylXklRG; 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 e64si1876086pfe.178.2019.05.15.05.19.58; Wed, 15 May 2019 05:20:13 -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=iylXklRG; 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 S1727638AbfEOLBN (ORCPT + 99 others); Wed, 15 May 2019 07:01:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:58144 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727081AbfEOLBK (ORCPT ); Wed, 15 May 2019 07:01:10 -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 4961721743; Wed, 15 May 2019 11:01:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557918068; bh=crH4j4bk9T5hPReY7aOC1uHCJbQFNCZmhpqxMqcar3o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iylXklRG5WNJzbpmmf1qhgqtBKnEZMwBF1NBULRBx52qq0TG3QACAMpvel0TkHAWx +8YhQQE6ia2eiDxvBn5GW0tCmupCmXPY6ALkqmOa9tI1KoTrY4Tw83SyVvgTw+0G7m LAYYKaJA5LSy09De0Z4EIaG9FXOpWC0tBa6yFHDY= 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 3.18 80/86] packet: Fix error path in packet_init Date: Wed, 15 May 2019 12:55:57 +0200 Message-Id: <20190515090655.780631371@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190515090642.339346723@linuxfoundation.org> References: <20190515090642.339346723@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 @@ -4200,14 +4200,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; }