From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-874563-1516768099-2-6188802740967413040 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.25, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES en, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='com', MailFrom='org', XOriginatingCountry='US' X-Spam-charsets: plain='iso-8859-1' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: stable-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1516768098; b=pFzqdh95zMrbLgMpLGvRzw8Y+aTq2Xx3/RFMRk0PhN4CiqR VKflvx1SyJvLft2vaUrndtP5NlsLiQdFkds+drPcwPFYAYIBJ3DS+kLqEGkrB2rZ FxwnLOJmj9BgXUOmhGvRX0OK8LTT80/+Xxbx32AvHTAu0nUcOQmGRV0ayKpVoe0k e3vdTEjtOvtqj7O2SkdurgX2YOQ7vVQcfeWzbEvW8OKsH0446SfM4s0sHDV6oubc 4QobFGyzql37xDPX70n8ykGqxIomii79HEvdgPDdY773HO4TRvgGHbeH7ndp8zj8 DSZSMUrSUhCEEYf2KzxBaULbhOEtlLknzYyx70g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=from:to:cc:subject:date:message-id :references:in-reply-to:content-type:content-transfer-encoding :mime-version:sender:list-id; s=arctest; t=1516768098; bh=iTl5oz oTPaxdPerRGnLLXL4oBznb6Urv3wS8o5T/88k=; b=B1h/lu6MHO+pKFxijiWCtL vbxe+GehwkFFo9T4UMCrKd2U9bVeXhXscsxh0SkK070kR3esExfYjyC/NphYhi70 ydTcYrimUOyM6o2vNOYVFM1X1is1HpK99X1LTJ+pDBl06pDbKVm3HsNYwOf+DM9D nSXfMIFyjJWNA3Yoo5RjXYSW3oH9p8IGkq1Etd/rz5KVqjTQ7QQca+BvZkhdDV6O GoxeRfZApIcUyVcycgrsd8jgiBqYrf6xtgG75wAlSAB0zTcF5DPvtMTyEjmGQ6Dd vJKQIHN7G3gsW74PshofGnWrWQYu1GIudxS3WFdZnL5W9jMYsw3F5sFy4692OdNw == ARC-Authentication-Results: i=1; mx2.messagingengine.com; arc=none (no signatures found); dkim=pass (1024-bit rsa key sha256) header.d=microsoft.com header.i=@microsoft.com header.b=Qm+PXS6I x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=selector1; dmarc=pass (p=reject,has-list-id=yes,d=none) header.from=microsoft.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=microsoft.com header.result=pass header_is_org_domain=yes Authentication-Results: mx2.messagingengine.com; arc=none (no signatures found); dkim=pass (1024-bit rsa key sha256) header.d=microsoft.com header.i=@microsoft.com header.b=Qm+PXS6I x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=selector1; dmarc=pass (p=reject,has-list-id=yes,d=none) header.from=microsoft.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=microsoft.com header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933358AbeAXE17 (ORCPT ); Tue, 23 Jan 2018 23:27:59 -0500 Received: from mail-by2nam03on0118.outbound.protection.outlook.com ([104.47.42.118]:51388 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933205AbeAXET2 (ORCPT ); Tue, 23 Jan 2018 23:19:28 -0500 From: Sasha Levin To: "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" CC: Vasily Averin , "J . Bruce Fields" , Sasha Levin Subject: [PATCH AUTOSEL for 4.4 23/35] lockd: fix "list_add double add" caused by legacy signal interface Thread-Topic: [PATCH AUTOSEL for 4.4 23/35] lockd: fix "list_add double add" caused by legacy signal interface Thread-Index: AQHTlMowNyax7N1RbUaSWfTOAmYdNQ== Date: Wed, 24 Jan 2018 04:17:04 +0000 Message-ID: <20180124041645.32420-23-alexander.levin@microsoft.com> References: <20180124041645.32420-1-alexander.levin@microsoft.com> In-Reply-To: <20180124041645.32420-1-alexander.levin@microsoft.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [52.168.54.252] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;DM5PR2101MB0998;7:IouPmxPO97ZGQEGVi8KxamzA5ewUU7nl16AsDT9fYAR7OZgmGoY5dn3XI4yxGtt/+GOtEjcOxQQhpZ8FjYgFTrnunMzuC5mGEcsaOF4t2LnLkvgJCdBU9zsm5aOLQjQ4coPpgDQHe4j8CrXgg9LzYuP+SCNjqmTfQSMrFvQk41aDuguK8LDB6wN33BUp113HIgEv0UUgFYQh+hE3KIoLj7VzQC8c1fUgH2phHgAmmum7J11+ZkbMrXPdklE4qVKH x-ms-office365-filtering-correlation-id: 86770f28-3f28-48a4-2bb0-08d562e1a696 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(5600026)(4604075)(3008032)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(2017052603307)(7193020);SRVR:DM5PR2101MB0998; x-ms-traffictypediagnostic: DM5PR2101MB0998: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(28532068793085)(89211679590171); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(61425038)(6040501)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231046)(2400081)(944501161)(93006095)(93001095)(6055026)(61426038)(61427038)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(20161123562045)(6072148)(201708071742011);SRVR:DM5PR2101MB0998;BCL:0;PCL:0;RULEID:;SRVR:DM5PR2101MB0998; x-forefront-prvs: 056297E276 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(366004)(39380400002)(346002)(39860400002)(396003)(376002)(199004)(189003)(14454004)(3660700001)(6346003)(10290500003)(105586002)(66066001)(6506007)(8676002)(22452003)(86612001)(54906003)(10090500001)(81166006)(81156014)(76176011)(110136005)(86362001)(68736007)(106356001)(59450400001)(8936002)(3280700002)(36756003)(25786009)(107886003)(2501003)(6666003)(99286004)(2906002)(26005)(2950100002)(72206003)(102836004)(305945005)(6116002)(3846002)(5660300001)(4326008)(478600001)(316002)(53936002)(97736004)(2900100001)(5250100002)(6512007)(6436002)(6486002)(1076002)(7736002)(22906009)(217873001);DIR:OUT;SFP:1102;SCL:1;SRVR:DM5PR2101MB0998;H:DM5PR2101MB1032.namprd21.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alexander.Levin@microsoft.com; x-microsoft-antispam-message-info: ZigYT3HsXPaJPKltXSaNrBGdQArCnUJj+Oh4tbCJU62fI10DrARD4qtsX7+fWwFNbF+bpmyCSmPQPO45Dpf1IA== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 86770f28-3f28-48a4-2bb0-08d562e1a696 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jan 2018 04:17:04.3267 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR2101MB0998 Sender: stable-owner@vger.kernel.org X-Mailing-List: stable@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: From: Vasily Averin [ Upstream commit 81833de1a46edce9ca20cfe079872ac1c20ef359 ] restart_grace() uses hardcoded init_net. It can cause to "list_add double add" in following scenario: 1) nfsd and lockd was started in several net namespaces 2) nfsd in init_net was stopped (lockd was not stopped because it have users from another net namespaces) 3) lockd got signal, called restart_grace() -> set_grace_period() and enabled lock_manager in hardcoded init_net. 4) nfsd in init_net is started again, its lockd_up() calls set_grace_period() and tries to add lock_manager into init_net 2nd time. Jeff Layton suggest: "Make it safe to call locks_start_grace multiple times on the same lock_manager. If it's already on the global grace_list, then don't try to add it again. (But we don't intentionally add twice, so for now we WARN about that case.) With this change, we also need to ensure that the nfsd4 lock manager initializes the list before we call locks_start_grace. While we're at it, move the rest of the nfsd_net initialization into nfs4_state_create_net. I see no reason to have it spread over two functions like it is today." Suggested patch was updated to generate warning in described situation. Suggested-by: Jeff Layton Signed-off-by: Vasily Averin Signed-off-by: J. Bruce Fields Signed-off-by: Sasha Levin --- fs/nfs_common/grace.c | 6 +++++- fs/nfsd/nfs4state.c | 7 ++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/fs/nfs_common/grace.c b/fs/nfs_common/grace.c index e280e9c9ebf3..77d136ac8909 100644 --- a/fs/nfs_common/grace.c +++ b/fs/nfs_common/grace.c @@ -30,7 +30,11 @@ locks_start_grace(struct net *net, struct lock_manager *= lm) struct list_head *grace_list =3D net_generic(net, grace_net_id); =20 spin_lock(&grace_lock); - list_add(&lm->list, grace_list); + if (list_empty(&lm->list)) + list_add(&lm->list, grace_list); + else + WARN(1, "double list_add attempt detected in net %x %s\n", + net->ns.inum, (net =3D=3D &init_net) ? "(init_net)" : ""); spin_unlock(&grace_lock); } EXPORT_SYMBOL_GPL(locks_start_grace); diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index dddf8fd3d058..0f58f2196c12 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -6789,6 +6789,10 @@ static int nfs4_state_create_net(struct net *net) INIT_LIST_HEAD(&nn->sessionid_hashtbl[i]); nn->conf_name_tree =3D RB_ROOT; nn->unconf_name_tree =3D RB_ROOT; + nn->boot_time =3D get_seconds(); + nn->grace_ended =3D false; + nn->nfsd4_manager.block_opens =3D true; + INIT_LIST_HEAD(&nn->nfsd4_manager.list); INIT_LIST_HEAD(&nn->client_lru); INIT_LIST_HEAD(&nn->close_lru); INIT_LIST_HEAD(&nn->del_recall_lru); @@ -6843,9 +6847,6 @@ nfs4_state_start_net(struct net *net) ret =3D nfs4_state_create_net(net); if (ret) return ret; - nn->boot_time =3D get_seconds(); - nn->grace_ended =3D false; - nn->nfsd4_manager.block_opens =3D true; locks_start_grace(net, &nn->nfsd4_manager); nfsd4_client_tracking_init(net); printk(KERN_INFO "NFSD: starting %ld-second grace period (net %p)\n", --=20 2.11.0