Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp749470ybi; Wed, 17 Jul 2019 04:20:06 -0700 (PDT) X-Google-Smtp-Source: APXvYqyRhU2hKYWzhgiEGFBVLxIsiDDiZynWgy+yZ9HRX3h/07iwSQf8+g5rgZ70aNcS/u+yfJIX X-Received: by 2002:a17:90a:db42:: with SMTP id u2mr43502697pjx.48.1563362406768; Wed, 17 Jul 2019 04:20:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563362406; cv=none; d=google.com; s=arc-20160816; b=GLRXx9ub27rB65ZHseQdPEEmdcgZ/mUSSOFNMqAOuZyhvIsArmPVtFuCAWaMndEuUV 42i6ixDeP49yJ0kkXZuu4gPh7WnRZtUndMkSuOkHcqMhDZT1Dx7r+VyoDkpYevd2mhvl FaSJaRq3q30dF32TC7s0Ddc6Ei9pKrdrzNFQIZvL27RGZiSzGk4nzRnw6YKFv3rQnmVJ vv3F9HFVFkNiXcmrEssllt/rI7MoquzLK/v4kOUbFJpdkp/Tdc4vsTKMmCPLxg+w9ZBf Xe6Bho+VoF0vCYrAo5Aq73TsSsQVeXZ/tQpUz1Uh1bcfYS00x+1e889maIP/U1YmRJ6V D4xA== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=/IC0jhKYQHLpJ+k1s6TL2aL27xMYfMlWCDRYtle1I48=; b=pW2UslcT0C+ABCR64Yv9tisFdklrwGnKlf5q4GUGb2zV0LWnXPglBklddiA7K9ybP2 Vq6hkcwxy6UEW/Me0fZpP7cBMegcDUyt0tMwzG5LYO+rXsiw6ZQ5xCv1Rc3O8LmOeKGp kC2vhdlEMMAXp0p5TknlDjnvTdZrq9vgYfvVBMh+d/RT9sJ1JWkpW45hYRnsIh6Do5OM USbpjA2MpN7BDlgxDFFwQW57RS2yrHuXCPEkEZBdg1DYmVn6Ps+ZKAf1Z6uWZte5qPzz 1/hIVgBWr2Hdh/IBkD6VnuwoIJ+vm36Ewzxhg1wMmDN6aEWHitzqhWihNvh9A0hAZ+4l angg== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l70si21402773pje.68.2019.07.17.04.19.49; Wed, 17 Jul 2019 04:20:06 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726580AbfGQLTa (ORCPT + 99 others); Wed, 17 Jul 2019 07:19:30 -0400 Received: from relay.sw.ru ([185.231.240.75]:40572 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725799AbfGQLTa (ORCPT ); Wed, 17 Jul 2019 07:19:30 -0400 Received: from [172.16.24.21] by relay.sw.ru with esmtp (Exim 4.92) (envelope-from ) id 1hnhy0-0008Pe-EY; Wed, 17 Jul 2019 14:19:24 +0300 Subject: Re: [PATCH v3 1/3] kernel/notifier.c: avoid duplicate registration To: Xiaoming Ni , adobriyan@gmail.com, akpm@linux-foundation.org, anna.schumaker@netapp.com, arjan@linux.intel.com, bfields@fieldses.org, chuck.lever@oracle.com, davem@davemloft.net, gregkh@linuxfoundation.org, jlayton@kernel.org, luto@kernel.org, mingo@kernel.org, Nadia.Derbey@bull.net, paulmck@linux.vnet.ibm.com, semen.protsenko@linaro.org, stable@kernel.org, stern@rowland.harvard.edu, tglx@linutronix.de, torvalds@linux-foundation.org, trond.myklebust@hammerspace.com, viresh.kumar@linaro.org Cc: alex.huangjianhui@huawei.com, dylix.dailei@huawei.com, linux-kernel@vger.kernel.org, linux-nfs@vger.kernel.org, netdev@vger.kernel.org References: <1562728150-30301-1-git-send-email-nixiaoming@huawei.com> From: Vasily Averin Message-ID: <5a84e4b6-902d-a2ab-8416-2320bfab2a52@virtuozzo.com> Date: Wed, 17 Jul 2019 14:19:13 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <1562728150-30301-1-git-send-email-nixiaoming@huawei.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 7/10/19 6:09 AM, Xiaoming Ni wrote: > Registering the same notifier to a hook repeatedly can cause the hook > list to form a ring or lose other members of the list. > > case1: An infinite loop in notifier_chain_register() can cause soft lockup > atomic_notifier_chain_register(&test_notifier_list, &test1); > atomic_notifier_chain_register(&test_notifier_list, &test1); > atomic_notifier_chain_register(&test_notifier_list, &test2); > > case2: An infinite loop in notifier_chain_register() can cause soft lockup > atomic_notifier_chain_register(&test_notifier_list, &test1); > atomic_notifier_chain_register(&test_notifier_list, &test1); > atomic_notifier_call_chain(&test_notifier_list, 0, NULL); > > case3: lose other hook test2 > atomic_notifier_chain_register(&test_notifier_list, &test1); > atomic_notifier_chain_register(&test_notifier_list, &test2); > atomic_notifier_chain_register(&test_notifier_list, &test1); > > case4: Unregister returns 0, but the hook is still in the linked list, > and it is not really registered. If you call notifier_call_chain > after ko is unloaded, it will trigger oops. > > If the system is configured with softlockup_panic and the same > hook is repeatedly registered on the panic_notifier_list, it > will cause a loop panic. > > Add a check in notifier_chain_register() to avoid duplicate registration > > Signed-off-by: Xiaoming Ni Reviewed-by: Vasily Averin > --- > kernel/notifier.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/kernel/notifier.c b/kernel/notifier.c > index d9f5081..30bedb8 100644 > --- a/kernel/notifier.c > +++ b/kernel/notifier.c > @@ -23,7 +23,10 @@ static int notifier_chain_register(struct notifier_block **nl, > struct notifier_block *n) > { > while ((*nl) != NULL) { > - WARN_ONCE(((*nl) == n), "double register detected"); > + if (unlikely((*nl) == n)) { > + WARN(1, "double register detected"); > + return 0; > + } > if (n->priority > (*nl)->priority) > break; > nl = &((*nl)->next); >