Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6369478imu; Sun, 2 Dec 2018 16:35:18 -0800 (PST) X-Google-Smtp-Source: AFSGD/W/yiBfc6bUlXsI+lmx4EEPZvyxR1pFfmcPpdSmyXnoJzwqP9XrsWxQ2n8VwR0T66Oz148/ X-Received: by 2002:a17:902:30a3:: with SMTP id v32mr8176315plb.26.1543797318422; Sun, 02 Dec 2018 16:35:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543797318; cv=none; d=google.com; s=arc-20160816; b=QGN8kJuVnQ/7dT8SEqj3gUwOWiB2SYd0HMpmSh+vLMmfiNpXHZg6//B0kEekFIj5JR Xy1bUVCVbPuIMSHWd3sECK1mYjC6AdMNR/ozPEERUQ/wDlTWBTBJed/OwtbxyGT5FfO1 egMKmbaFC6w5bikulTWfLICm5Wsxb+KgzMwE+zwYtAaMUVrfOMI02ZZChzBiipSQlGpS bQFrFnrmZGZWHRUn0QU6fRD5xtVOQl86Jk6RHysoi/Ba7Ju6Zx1dUShFqlkS5xmzvOIi ID14vKk+/yxrYgaiT7lnSYj1oYCHkOpko9/lvAbxnE4ZmdQe/TWhs4IHskeorb4iCoQ4 XJVA== 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:cc:subject:date:to :from; bh=A5AqHUA1+OFegHlDi5z+9Lrt0s0V1oS8IWYOScjxOgM=; b=uJ94NoQnycq2u9i81vZKZFXoRJtOVYvbqAPuHP7HW4Gm4OBcE9DakYEQCCHWhqCYRN OIfUJ/juJbr+jqv01hU3gy+JAEticKivlVpZSZGvVax0VDyuMxSq5/yBJWbKxN8bOIV6 TRUCksasSqaoDvndzNGIQWdt1mBU+1QynT2X5ZcfQRp0hLbSpKYjY7SnW6MgYh+w4frP QykLbYi+NdbDRukphPZMhVS8cwxGnJUNlPutX2RNrb9nAIJzETv/XthH1qEJo95BOx1i WJ7AbT7cGnXl+Vg0aXx3JNVZPvDm2TR7EBDC5YNPb8S9anuB+L6L1z97oVUCmZQ9vVDE AeBQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t75si11938685pfi.193.2018.12.02.16.35.03; Sun, 02 Dec 2018 16:35:18 -0800 (PST) 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726008AbeLCAcz (ORCPT + 99 others); Sun, 2 Dec 2018 19:32:55 -0500 Received: from mx2.suse.de ([195.135.220.15]:41100 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725785AbeLCAcz (ORCPT ); Sun, 2 Dec 2018 19:32:55 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 2B8CAAD90; Mon, 3 Dec 2018 00:32:48 +0000 (UTC) From: NeilBrown To: "J. Bruce Fields" , Chuck Lever , Jeff Layton , Trond Myklebust , Anna Schumaker Date: Mon, 03 Dec 2018 11:30:30 +1100 Subject: [PATCH 08/23] SUNRPC: remove machine_cred field from struct auth_cred Cc: Linux NFS Mailing List , linux-kernel@vger.kernel.org Message-ID: <154379703042.28598.14367691422771762233.stgit@noble> In-Reply-To: <154379689752.28598.6750646657534626618.stgit@noble> References: <154379689752.28598.6750646657534626618.stgit@noble> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The cred is a machine_cred iff ->principal is set, so there is no need for the extra flag. There is one case which deserves some explanation. nfs4_root_machine_cred() calls rpc_lookup_machine_cred() with a NULL principal name which results in not getting a machine credential, but getting a root credential instead. This appears to be what is expected of the caller, and is clearly the result provided by both auth_unix and auth_gss which already ignore the flag. Signed-off-by: NeilBrown --- include/linux/sunrpc/auth.h | 3 +-- net/sunrpc/auth_generic.c | 12 ++++++------ net/sunrpc/auth_gss/auth_gss.c | 5 +---- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index 831ea65bd9f4..1c0468f39479 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h @@ -46,9 +46,8 @@ enum { struct auth_cred { const struct cred *cred; - const char *principal; + const char *principal; /* If present, this is a machine credential */ unsigned long ac_flags; - unsigned char machine_cred : 1; }; /* diff --git a/net/sunrpc/auth_generic.c b/net/sunrpc/auth_generic.c index 6c7c65da6063..7d1a8f45726c 100644 --- a/net/sunrpc/auth_generic.c +++ b/net/sunrpc/auth_generic.c @@ -50,12 +50,13 @@ EXPORT_SYMBOL_GPL(rpc_lookup_cred_nonblock); /* * Public call interface for looking up machine creds. + * Note that if service_name is NULL, we actually look up + * "root" credential. */ struct rpc_cred *rpc_lookup_machine_cred(const char *service_name) { struct auth_cred acred = { .principal = service_name, - .machine_cred = 1, .cred = get_task_cred(&init_task), }; struct rpc_cred *ret; @@ -108,11 +109,10 @@ generic_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags, g gcred->acred.cred = gcred->gc_base.cr_cred; gcred->acred.ac_flags = 0; - gcred->acred.machine_cred = acred->machine_cred; gcred->acred.principal = acred->principal; dprintk("RPC: allocated %s cred %p for uid %d gid %d\n", - gcred->acred.machine_cred ? "machine" : "generic", + gcred->acred.principal ? "machine" : "generic", gcred, from_kuid(&init_user_ns, acred->cred->fsuid), from_kgid(&init_user_ns, acred->cred->fsgid)); @@ -145,7 +145,7 @@ generic_destroy_cred(struct rpc_cred *cred) static int machine_cred_match(struct auth_cred *acred, struct generic_cred *gcred, int flags) { - if (!gcred->acred.machine_cred || + if (!gcred->acred.principal || gcred->acred.principal != acred->principal || !uid_eq(gcred->acred.cred->fsuid, acred->cred->fsuid) || !gid_eq(gcred->acred.cred->fsgid, acred->cred->fsgid)) @@ -163,12 +163,12 @@ generic_match(struct auth_cred *acred, struct rpc_cred *cred, int flags) int i; struct group_info *a, *g; - if (acred->machine_cred) + if (acred->principal) return machine_cred_match(acred, gcred, flags); if (!uid_eq(gcred->acred.cred->fsuid, acred->cred->fsuid) || !gid_eq(gcred->acred.cred->fsgid, acred->cred->fsgid) || - gcred->acred.machine_cred != 0) + gcred->acred.principal != NULL) goto out_nomatch; a = acred->cred->group_info; diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index 8c9e572aeea2..0fb390d9cd6e 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c @@ -1395,9 +1395,7 @@ gss_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags, gfp_t */ cred->gc_base.cr_flags = 1UL << RPCAUTH_CRED_NEW; cred->gc_service = gss_auth->service; - cred->gc_principal = NULL; - if (acred->machine_cred) - cred->gc_principal = acred->principal; + cred->gc_principal = acred->principal; kref_get(&gss_auth->kref); return &cred->gc_base; @@ -1610,7 +1608,6 @@ static int gss_renew_cred(struct rpc_task *task) struct auth_cred acred = { .cred = oldcred->cr_cred, .principal = gss_cred->gc_principal, - .machine_cred = (gss_cred->gc_principal != NULL ? 1 : 0), }; struct rpc_cred *new;