Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4627598pxj; Wed, 12 May 2021 09:32:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzmZOfvCaX7SxSjd486YttYFqPRxbEAqtK3HkcAD8w0gKDutQqWET8H0/4um62dVoIciNVB X-Received: by 2002:a05:6512:3387:: with SMTP id h7mr17350239lfg.77.1620837177080; Wed, 12 May 2021 09:32:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620837177; cv=none; d=google.com; s=arc-20160816; b=xt/ierI6zh/7myQG0fFcte2CGelnVF8kSoextzAco4KjfkrRgHjKMBywPusDbdzdRq w111IQewRsWVXk38Bq2upbjqt+rUNiobkAnw8zDXN5+n0u0wBEsYbL93yDEIQzbJv/5b 6g8obnCSjKZbxH3HVRkha79JSfQ6QEgS2T6kpYbuuSjfmnsLBqaTJr0uPcpYsDH0bStR azbWFMarJzGKPeNhGc0YsuacOLU7WTVbghyo9SyvVLBbfwzg2AD/eZZPrf2ehJLlopTq zaxJ6lZ4NL1aGl+UiaaaQ2oqff5SvVBUHXp4HVPzT3vX04eTpxgJMicKJC3fa5oS/+C3 kO2A== 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:cc:to:from :subject; bh=jCTZu0Y5y7FSEnYRg79+tIxbqtlclCqbT96gP+QP0Ic=; b=HCCAvOEw1Wj3ca2UeGfZdIMuVahpYCtOecB2wlwx4IAZQEcQhBzQJwXELRLc0V9Svo QWW1GoVnO+TIJuoRBOUm28d9qkwkvoRRezdy/8jpqQsdiTBQzz6KYfagf0LpbUo3vOG2 8lfHS5qIU47P7tCZIee6RLZAI0l60wRcslmgh/hdweyP4r5Cmv0gAq6ocEFIXepjWUlr uw2LmYO1K1IG+giTjQDZ0PgYH6G1Hs0ywnRpFv/9Ieya9rn37qwl/789onWPJDefLjVv sppQerKJ83zz1Yfbj9T/5rxt08CgKzALaLz2wUVlEc5pvBFixd2JM34tXq88eMCHxfvu Hnyw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 28si491714lfq.390.2021.05.12.09.32.17; Wed, 12 May 2021 09:32:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237012AbhELQcY (ORCPT + 99 others); Wed, 12 May 2021 12:32:24 -0400 Received: from mail.kernel.org ([198.145.29.99]:33528 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238937AbhELQGu (ORCPT ); Wed, 12 May 2021 12:06:50 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8A8A461CF8; Wed, 12 May 2021 15:35:16 +0000 (UTC) Subject: [PATCH v2 03/25] NFSD: Add nfsd_clid_cred_mismatch tracepoint From: Chuck Lever To: linux-nfs@vger.kernel.org Cc: dwysocha@redhat.com, bfields@fieldses.org, rostedt@goodmis.org Date: Wed, 12 May 2021 11:35:15 -0400 Message-ID: <162083371563.3108.13309642693256783022.stgit@klimt.1015granger.net> In-Reply-To: <162083366966.3108.12581818416105328952.stgit@klimt.1015granger.net> References: <162083366966.3108.12581818416105328952.stgit@klimt.1015granger.net> User-Agent: StGit/1.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Record when a client tries to establish a lease record but uses an unexpected credential. This is often a sign of a configuration problem. Signed-off-by: Chuck Lever --- fs/nfsd/nfs4state.c | 14 ++++++++++---- fs/nfsd/trace.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 6abe48dee6ed..84c4021b3826 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -3181,6 +3181,7 @@ nfsd4_exchange_id(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, if (!creds_match) { /* case 3 */ if (client_has_state(conf)) { status = nfserr_clid_inuse; + trace_nfsd_clid_cred_mismatch(conf, rqstp); goto out; } goto out_new; @@ -3425,9 +3426,10 @@ nfsd4_create_session(struct svc_rqst *rqstp, goto out_free_conn; } } else if (unconf) { + status = nfserr_clid_inuse; if (!same_creds(&unconf->cl_cred, &rqstp->rq_cred) || !rpc_cmp_addr(sa, (struct sockaddr *) &unconf->cl_addr)) { - status = nfserr_clid_inuse; + trace_nfsd_clid_cred_mismatch(unconf, rqstp); goto out_free_conn; } status = nfserr_wrong_cred; @@ -3976,7 +3978,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, if (clp_used_exchangeid(conf)) goto out; if (!same_creds(&conf->cl_cred, &rqstp->rq_cred)) { - trace_nfsd_clid_inuse_err(conf); + trace_nfsd_clid_cred_mismatch(conf, rqstp); goto out; } } @@ -4034,10 +4036,14 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, * Nevertheless, RFC 7530 recommends INUSE for this case: */ status = nfserr_clid_inuse; - if (unconf && !same_creds(&unconf->cl_cred, &rqstp->rq_cred)) + if (unconf && !same_creds(&unconf->cl_cred, &rqstp->rq_cred)) { + trace_nfsd_clid_cred_mismatch(unconf, rqstp); goto out; - if (conf && !same_creds(&conf->cl_cred, &rqstp->rq_cred)) + } + if (conf && !same_creds(&conf->cl_cred, &rqstp->rq_cred)) { + trace_nfsd_clid_cred_mismatch(conf, rqstp); goto out; + } /* cases below refer to rfc 3530 section 14.2.34: */ if (!unconf || !same_verf(&confirm, &unconf->cl_confirm)) { if (conf && same_verf(&confirm, &conf->cl_confirm)) { diff --git a/fs/nfsd/trace.h b/fs/nfsd/trace.h index f0ee18202de0..25ed99220c7b 100644 --- a/fs/nfsd/trace.h +++ b/fs/nfsd/trace.h @@ -534,6 +534,34 @@ DEFINE_EVENT(nfsd_net_class, nfsd_##name, \ DEFINE_NET_EVENT(grace_start); DEFINE_NET_EVENT(grace_complete); +TRACE_EVENT(nfsd_clid_cred_mismatch, + TP_PROTO( + const struct nfs4_client *clp, + const struct svc_rqst *rqstp + ), + TP_ARGS(clp, rqstp), + TP_STRUCT__entry( + __field(u32, cl_boot) + __field(u32, cl_id) + __field(unsigned long, cl_flavor) + __field(unsigned long, new_flavor) + __array(unsigned char, addr, sizeof(struct sockaddr_in6)) + ), + TP_fast_assign( + __entry->cl_boot = clp->cl_clientid.cl_boot; + __entry->cl_id = clp->cl_clientid.cl_id; + __entry->cl_flavor = clp->cl_cred.cr_flavor; + __entry->new_flavor = rqstp->rq_cred.cr_flavor; + memcpy(__entry->addr, &rqstp->rq_xprt->xpt_remote, + sizeof(struct sockaddr_in6)); + ), + TP_printk("client %08x:%08x flavor=%s, conflict=%s from addr=%pISpc", + __entry->cl_boot, __entry->cl_id, + show_nfsd_authflavor(__entry->cl_flavor), + show_nfsd_authflavor(__entry->new_flavor), __entry->addr + ) +) + TRACE_EVENT(nfsd_clid_inuse_err, TP_PROTO(const struct nfs4_client *clp), TP_ARGS(clp),