Received: by 2002:a05:7412:b130:b0:e2:908c:2ebd with SMTP id az48csp831726rdb; Fri, 17 Nov 2023 14:14:37 -0800 (PST) X-Google-Smtp-Source: AGHT+IEMdbg1hWx8hyAyMe/bhu2Dr+nPi1+4vXACf2DNNj6wKPq11Iqv2nDs6NUyYdJaUhagxmxp X-Received: by 2002:a92:c0cf:0:b0:359:cbd5:c512 with SMTP id t15-20020a92c0cf000000b00359cbd5c512mr979264ilf.17.1700259277026; Fri, 17 Nov 2023 14:14:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700259276; cv=none; d=google.com; s=arc-20160816; b=vQPdlUFUMF84Tr5nNzgXsDBqh1aRwzX7legrJLi8L4ti984orN4SpHBp8gg1Vx6qjN YDw7gqr/N3De6kgximXW4AWD2Xyh39P3CaamF/lXQ/Cxy4Ldnrtjl2muuPTHZwLB/XvQ ToYtdiUF+TI2NYgxRjXMNjO1Bbh3KZTf+jVDQZIZ8waT0ilrJrsB8HklP1AwzXhhkudf b5xql+y3i6MFR81YgxxGkGoGHnclGtJ/dRXcHORO8BaKAFO2HvVkn0+WrF5rddSWWpK0 st74s6kA3waAYk6yOZNQgd8qJ7SCALp88zTAzr014u7M0KO31EPROYH7OQgqAKGktIQE uxkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:to:from:subject :dkim-signature; bh=RWZiAWw266BENfcGGO4aFrgvBCgywz+su16lKDcWTEs=; fh=Mys3y4MwsHRytUQMpdfGBn3oGRYLcLloxNwkFYMYMmg=; b=UDuyj1OCoiOb8VCKXRAtJ5Dmi2p4A1ZdnHJnRpH5Q9Lv/K59IUTheJs7z+AdqnJFyr iAMe+ENgMp1y2g7MF69v/Dav4twqi2eKvg4uFTMXA9rr6bEKXlVbuvWqXvo/imprQBuU 1P7PExtn19eNu5ibzP+etG9iuGuaZNwnfI5dQea9uts7fRxnCvNQBcV00TZhyy8uLxgx nHt6L8iKQ3chv+kuE4u0L5rrqYy70UC3Z62pRtTrAaVnNJYgkS3ZmWDAXvKZV5Yl8OkJ eEK2CUCB2WiHJX4iktW4+mPVcPNSQxL2CikeseaYB83QYT7xHqbey+CsbaY5yDfjOqCW CBlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=oSSdhWUr; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id dh4-20020a056a020b8400b005bdc949fee3si2981622pgb.880.2023.11.17.14.14.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Nov 2023 14:14:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=oSSdhWUr; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id AD44C8250267; Fri, 17 Nov 2023 14:14:34 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231905AbjKQWOc (ORCPT + 99 others); Fri, 17 Nov 2023 17:14:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41650 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229823AbjKQWOb (ORCPT ); Fri, 17 Nov 2023 17:14:31 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E1AF0D4E for ; Fri, 17 Nov 2023 14:14:28 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 70889C433CA for ; Fri, 17 Nov 2023 22:14:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700259268; bh=/jy2dlNVtF45gHuw2giQPnbKbbI+95WgTArDmH6adxQ=; h=Subject:From:To:Date:In-Reply-To:References:From; b=oSSdhWUr1o5gZGhGTZfhODMzomIYdvKgnUCnl0LTKvw+BBx6AVBzKHU9zMXS6h1C3 dmX+CD0ZqDFvS5dWy9vsR/8nU75C9aUmj5PeAskoTt9faFValTptCX4ApsdmA/nj17 HfrfzCCk2+3bsIKOb7ZSexD/Cu5n9MmYiorkZH6y5qhZIxBdNjFAG+nltokrXcQ7Va 14/V7mWkJjfIOm0qJDjldK00Ms0ZRSq3QiF8M7F2Bokd3IVoP7CAOtbTt0/d3TZQda TvqARajRWm502jcoLNegc/la5iuhFHGVkMGXV6fJau005K/ybp7jXP866o+WOEJm0I NpjBLCH5PkBOA== Subject: [PATCH v2 1/4] SUNRPC: Add a server-side API for retrieving an RPC's pseudoflavor From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 17 Nov 2023 17:14:27 -0500 Message-ID: <170025926738.4577.11486458886663210137.stgit@bazille.1015granger.net> In-Reply-To: <170025895725.4577.18051288602708688381.stgit@bazille.1015granger.net> References: <170025895725.4577.18051288602708688381.stgit@bazille.1015granger.net> User-Agent: StGit/1.5 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Fri, 17 Nov 2023 14:14:34 -0800 (PST) From: Chuck Lever NFSD will use this new API to determine whether nfsd_splice_read is safe to use. This avoids the need to add a dependency to NFSD for CONFIG_SUNRPC_GSS. Signed-off-by: Chuck Lever --- include/linux/sunrpc/svcauth.h | 7 ++++++- net/sunrpc/auth_gss/svcauth_gss.c | 6 ++++++ net/sunrpc/svcauth.c | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/include/linux/sunrpc/svcauth.h b/include/linux/sunrpc/svcauth.h index 6f90203edbf8..61c455f1e1f5 100644 --- a/include/linux/sunrpc/svcauth.h +++ b/include/linux/sunrpc/svcauth.h @@ -131,8 +131,11 @@ enum svc_auth_status { * This call releases a domain. * * set_client() - * Givens a pending request (struct svc_rqst), finds and assigns + * Given a pending request (struct svc_rqst), finds and assigns * an appropriate 'auth_domain' as the client. + * + * pseudoflavor() + * Returns RPC_AUTH pseudoflavor in use by @rqstp. */ struct auth_ops { char * name; @@ -143,11 +146,13 @@ struct auth_ops { int (*release)(struct svc_rqst *rqstp); void (*domain_release)(struct auth_domain *dom); enum svc_auth_status (*set_client)(struct svc_rqst *rqstp); + rpc_authflavor_t (*pseudoflavor)(struct svc_rqst *rqstp); }; struct svc_xprt; extern enum svc_auth_status svc_authenticate(struct svc_rqst *rqstp); +extern rpc_authflavor_t svc_auth_flavor(struct svc_rqst *rqstp); extern int svc_authorise(struct svc_rqst *rqstp); extern enum svc_auth_status svc_set_client(struct svc_rqst *rqstp); extern int svc_auth_register(rpc_authflavor_t flavor, struct auth_ops *aops); diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 18734e70c5dd..104d9a320142 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c @@ -2014,6 +2014,11 @@ svcauth_gss_domain_release(struct auth_domain *dom) call_rcu(&dom->rcu_head, svcauth_gss_domain_release_rcu); } +static rpc_authflavor_t svcauth_gss_pseudoflavor(struct svc_rqst *rqstp) +{ + return svcauth_gss_flavor(rqstp->rq_gssclient); +} + static struct auth_ops svcauthops_gss = { .name = "rpcsec_gss", .owner = THIS_MODULE, @@ -2022,6 +2027,7 @@ static struct auth_ops svcauthops_gss = { .release = svcauth_gss_release, .domain_release = svcauth_gss_domain_release, .set_client = svcauth_gss_set_client, + .pseudoflavor = svcauth_gss_pseudoflavor, }; static int rsi_cache_create_net(struct net *net) diff --git a/net/sunrpc/svcauth.c b/net/sunrpc/svcauth.c index aa4429d0b810..1619211f0960 100644 --- a/net/sunrpc/svcauth.c +++ b/net/sunrpc/svcauth.c @@ -160,6 +160,22 @@ svc_auth_unregister(rpc_authflavor_t flavor) } EXPORT_SYMBOL_GPL(svc_auth_unregister); +/** + * svc_auth_flavor - return RPC transaction's RPC_AUTH flavor + * @rqstp: RPC transaction context + * + * Returns an RPC flavor or GSS pseudoflavor. + */ +rpc_authflavor_t svc_auth_flavor(struct svc_rqst *rqstp) +{ + struct auth_ops *aops = rqstp->rq_authop; + + if (!aops->pseudoflavor) + return aops->flavour; + return aops->pseudoflavor(rqstp); +} +EXPORT_SYMBOL_GPL(svc_auth_flavor); + /************************************************** * 'auth_domains' are stored in a hash table indexed by name. * When the last reference to an 'auth_domain' is dropped,