Received: by 2002:a89:413:0:b0:1fd:dba5:e537 with SMTP id m19csp562065lqs; Thu, 13 Jun 2024 20:45:08 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCV5HZ0oqcKBTeRA8i8bzqw+5P84CecL2AtuVvZougUhiVofpM0MFLaeWfZktQIaoaeI0+zjarErH0ZXICJYbyuVFdY8zzTVGLH11yAj7w== X-Google-Smtp-Source: AGHT+IHPqyRup6YlWooI+x1EPHHt/IYEYFYxOGYM//SuRZrNBM/2rnMHBmQpk5EWZDCfSahkfaCm X-Received: by 2002:a17:903:32ca:b0:1e4:6938:6fe3 with SMTP id d9443c01a7336-1f862a0a2d5mr18646075ad.58.1718336708467; Thu, 13 Jun 2024 20:45:08 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1718336708; cv=pass; d=google.com; s=arc-20160816; b=TjCgU37Y1FzbKS+7H4Ng0Jh1+ZrjwnGDt0gyCJvrMIkBMAil2jmmojQXnnWEyCpYWL oS5FZndxcL8vDBbqhWA3XiGBPg2rXOjb9Ky2OnKK89ktRbpaMFfR9xiL3sXasdQrrEtG lUdLTdOJ4ASB8y7zUDrt4f10pkJ8ApO3bZSZOu5bqPTwnr+lwFJJoopQOmaOLjrdJSTn q42CyZUUoSbXo4QMDCHxeqyDKR2VtwOF/D9npt95VRfK47TYTfO8SzVLYBO3PVc7Watf qL/Nzg3j4gFDPVdEeaEVv6gDzTbcXR2ygTqxWoYqxQMO5ch574jAcClPjduBsnYJ0C6Z I+Sw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=/4m8ol0Zndgs4oYHythqKvcws7rud6TQszqGFCz6qi4=; fh=+HdF1SWcNPggmowVZtzfZ2+SYSXLLgvZBECjaw6UQek=; b=MUEAg5RwTTyfjLkJSvergCo/H5fsDtFDzulm0t/+YIuk1JzcsWXciRs4emqrXd5kVO wj0r62XrZAbieIetq/m1y2UZeF/Dx5yYXgpHjBj1eeLpwdYQ9PI4JtiOqQVafLLycGXu JqHKw8mnKuoCq4CxddpE0ZMLq5cu7wfXCMVS+9hbIVnX8+ysq0ZsyMIYjc3blAsTN739 2SPIdusdsEoA0aMWoy20+G9NTZSKrAD++NOW584sbr98So4FzoXS1JG4kJb/fROKMtJH SawHWFkEzcRG/pD2FTNs3Y/KEWkccyCWx+e24Yi2MR1LhrxRiO6/bocJfyX2ePDUDAJr Rsfw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=GvUrPnwZ; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-nfs+bounces-3818-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-nfs+bounces-3818-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id d9443c01a7336-1f855f07865si26149845ad.533.2024.06.13.20.45.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Jun 2024 20:45:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs+bounces-3818-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=GvUrPnwZ; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-nfs+bounces-3818-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-nfs+bounces-3818-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 17A22284256 for ; Fri, 14 Jun 2024 03:45:08 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5DC921474C0; Fri, 14 Jun 2024 03:44:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GvUrPnwZ" X-Original-To: linux-nfs@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 386FD1474A3 for ; Fri, 14 Jun 2024 03:44:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718336692; cv=none; b=AwOlCuKon4CrmN6H5CASw+9UGtlXOswqemrJsKj1a80Gvpek7RuPZWt8zrmLriXU4e7b6iW4mD1rnDMxxFFlD1QNIeG+0xZBm/gvXs+8M39OpwyTvnPTvOSDYDaqW3E0swAhb0VLnL60ANwW1PpkpRUPIqVr2+554IHVvQ/Pmng= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718336692; c=relaxed/simple; bh=FCw8d7u3yE/Yb082AyvJ4nrRXY5ztvkcW1gDSsH/7bI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i3JyC3IMX6Y2nkiOAX7RkTJrHjxpzoT+9a7bDbC05qHQbbUlNgNm4lRYqyS4PFFpJOO/GGyTTWNiO4yXjwWvTBxhDVtLfyI7GJXGdkMK5C8LEZY2pTCdcVXFye+7pBG9p8rSfyhIUexzhROXaV7EvZplRIGakYw9t/JNSkyK9hM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GvUrPnwZ; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id D9BF1C2BBFC; Fri, 14 Jun 2024 03:44:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1718336692; bh=FCw8d7u3yE/Yb082AyvJ4nrRXY5ztvkcW1gDSsH/7bI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GvUrPnwZHGyld0Vv90wsNlDv6smoEeXRZ/GxfbJzZ14L9puHoRAScb61GCuBwMmbc fTtDsfhCdxugCts6RIOa1a/SgAG21YLu49DxEesATZtwzMATXgPkxeKoyiqERFPtSj ZGyeseb2pZqnO1NDLa5DxOXGGPulmG+POm7DDLJRjif/tA3jfUe/nWSU9zLfA0+SFm ckvp2nN/ZXm0prkc1J3hAoFmS8SFvgoAg1bqR83WSc+GXffcngBU1nWC04u3vcIDIx OuHc0MXHFU5hOieB0Vx275bR9lBBihwEYnMaPBaGUWylOVVjgE8HxCNCEoPU+lZCkV p3iF9EfKj76ww== From: Mike Snitzer To: linux-nfs@vger.kernel.org Cc: Jeff Layton , Chuck Lever , Trond Myklebust , NeilBrown , snitzer@hammerspace.com Subject: [PATCH v3 18/18] nfsd/localio: use nfsd_serv_get/put in nfsd_open_local_fh Date: Thu, 13 Jun 2024 23:44:26 -0400 Message-ID: <20240614034426.31043-19-snitzer@kernel.org> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240614034426.31043-1-snitzer@kernel.org> References: <20240614034426.31043-1-snitzer@kernel.org> Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Use nfsd_serv_get to SRCU deference nn->nfsd_serv and pass the resulting svc_serv to nfsd_local_fakerqst_create, open the file handle and then drop the reference using nfsd_serv_put at the end of nfsd_open_local_fh. Verified to fix an easy to hit crash that would occur if an nfsd instance running in a container, with a localio client mounted, is shutdown. Upon restart of the container and associated nfsd the client would go on to crash due to NULL pointer dereference that occuured due to the nfs client's localio attempting to nfsd_open_local_fh(), using nn->nfsd_serv, without having a proper reference on nn->nfsd_serv. Signed-off-by: Mike Snitzer --- fs/nfsd/localio.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/nfsd/localio.c b/fs/nfsd/localio.c index cdf8e115b33e..d1d9fbaab82e 100644 --- a/fs/nfsd/localio.c +++ b/fs/nfsd/localio.c @@ -193,6 +193,7 @@ int nfsd_open_local_fh(struct net *net, struct nfsd_file *nf; int status = 0; int mayflags = NFSD_MAY_LOCALIO; + int srcu_idx; struct svc_serv *serv; __be32 beres; @@ -207,7 +208,7 @@ int nfsd_open_local_fh(struct net *net, } nn = net_generic(net, nfsd_net_id); - serv = READ_ONCE(nn->nfsd_serv); + serv = nfsd_serv_get(nn, &srcu_idx); if (unlikely(!serv)) { dprintk("%s: localio denied. Server not running\n", __func__); status = -ENXIO; @@ -247,6 +248,7 @@ int nfsd_open_local_fh(struct net *net, out_revertcred: revert_creds(save_cred); out_net: + nfsd_serv_put(nn, srcu_idx); put_net(net); return status; } -- 2.44.0