From patchwork Tue Nov 29 16:04:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever III X-Patchwork-Id: 9452535 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B8A2B60710 for ; Tue, 29 Nov 2016 16:04:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ABB02201BD for ; Tue, 29 Nov 2016 16:04:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9EC0E283FB; Tue, 29 Nov 2016 16:04:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3445A201BD for ; Tue, 29 Nov 2016 16:04:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933871AbcK2QEh (ORCPT ); Tue, 29 Nov 2016 11:04:37 -0500 Received: from mail-io0-f193.google.com ([209.85.223.193]:35226 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933710AbcK2QEg (ORCPT ); Tue, 29 Nov 2016 11:04:36 -0500 Received: by mail-io0-f193.google.com with SMTP id h133so30319175ioe.2; Tue, 29 Nov 2016 08:04:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=iyrnnq9UZff2QYFe3lcZnxFmQGG9gNpT9gbZnQIaSok=; b=Xu59aVm9cDFlcVeklkBoJ1EbK17zwCq0UMdD9v1hbJvLJ6c5tBV9e4e90iedn8kjcD YuIcpmDHmlCKuJQc5DHlBTJ28Yb/uNw/ULckQQ9CO1Tqsy11Sn/W7crixvZRre5rPxSS 6AeA5/cPoktpr1voVaMlAhaMG0nEsZnENvvIgx0x9vQmkitz7AwV9HV4d1QbcaOcCwJt UDiWyHYkYG3MYqyx3VR6ZELroKncsMcRUrKzPTZrZ16k9SmaSxsJAN0sTy0dPtkj8yN5 OPR+sgiKnrKmRk6fA6pfzOeL8Rc+KsQfeBLqa6YYtI8dJUOcrhdSPIL+EElm3sHgVZlq Pvhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:subject:from:to:cc:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=iyrnnq9UZff2QYFe3lcZnxFmQGG9gNpT9gbZnQIaSok=; b=mW4GfIU7jCB6j7NFbQFpb9iS2c0c9WZwcKrWveGZ+xE/msSostnjPnwBMm8j7678lx qqm8ydlxFgmvrQRP5ah8jm6Bziap0cPpqvOyCMyjm9NxgEI1u6PyGxrvnEryLo1n2WA3 832jlztNjgDhYWDRUlBQH8TDQHmYu+tzbYH6g1loLt1eq+K8ujHbJ9vo6/P6+c5m/GLc ZBIMdYi54lfK9UfaggZNw8KtR0bbveYwepsiiP2SyshPB2N0G8qWWX27V2opu3H944O5 QX6vQHcY02re20dhnNbYb6KdFOcpv/vZCR1rJxg+GQJNqR4aYogVejCSvOBTZfKhp2QR 1dXQ== X-Gm-Message-State: AKaTC02I09QEF+tMt82XOS3dOOR81W+z/nYXSBc0eLdWaN6gyctVD6ksG86RRHKBQY8xUw== X-Received: by 10.36.80.74 with SMTP id m71mr24276203itb.122.1480435475614; Tue, 29 Nov 2016 08:04:35 -0800 (PST) Received: from klimt.1015granger.net ([2604:8800:100:81fc:ec4:7aff:fe6c:6aa0]) by smtp.gmail.com with ESMTPSA id w143sm1058332itc.0.2016.11.29.08.04.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 29 Nov 2016 08:04:35 -0800 (PST) Subject: [PATCH v3 02/10] svcauth_gss: Close connection when dropping an incoming message From: Chuck Lever To: bfields@fieldses.org Cc: linux-rdma@vger.kernel.org, linux-nfs@vger.kernel.org Date: Tue, 29 Nov 2016 11:04:34 -0500 Message-ID: <20161129160434.4477.76542.stgit@klimt.1015granger.net> In-Reply-To: <20161129155521.4477.53561.stgit@klimt.1015granger.net> References: <20161129155521.4477.53561.stgit@klimt.1015granger.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP S5.3.3.1 of RFC 2203 requires that an incoming GSS-wrapped message whose sequence number lies outside the current window is dropped. The rationale is: The reason for discarding requests silently is that the server is unable to determine if the duplicate or out of range request was due to a sequencing problem in the client, network, or the operating system, or due to some quirk in routing, or a replay attack by an intruder. Discarding the request allows the client to recover after timing out, if indeed the duplication was unintentional or well intended. However, clients may rely on the server dropping the connection to indicate that a retransmit is needed. Without a connection reset, a client can wait forever without retransmitting, and the workload just stops dead. I've reproduced this behavior by running xfstests generic/323 on an NFSv4.0 mount with proto=rdma and sec=krb5i. To address this issue, have the server close the connection when it silently discards an incoming message due to a GSS sequence number problem. There are a few other places where the server will never reply. Change those spots in a similar fashion. Signed-off-by: Chuck Lever --- net/sunrpc/auth_gss/svcauth_gss.c | 2 +- net/sunrpc/svc.c | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 45662d7..886e9d38 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c @@ -1548,7 +1548,7 @@ static void destroy_use_gss_proxy_proc_entry(struct net *net) {} ret = SVC_COMPLETE; goto out; drop: - ret = SVC_DROP; + ret = SVC_CLOSE; out: if (rsci) cache_put(&rsci->h, sn->rsc_cache); diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 7c8070e..75f290b 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -1155,8 +1155,7 @@ static __printf(2,3) void svc_printk(struct svc_rqst *rqstp, const char *fmt, .. case SVC_DENIED: goto err_bad_auth; case SVC_CLOSE: - if (test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags)) - svc_close_xprt(rqstp->rq_xprt); + goto close; case SVC_DROP: goto dropit; case SVC_COMPLETE: @@ -1246,7 +1245,7 @@ static __printf(2,3) void svc_printk(struct svc_rqst *rqstp, const char *fmt, .. sendit: if (svc_authorise(rqstp)) - goto dropit; + goto close; return 1; /* Caller can now send it */ dropit: @@ -1254,11 +1253,16 @@ static __printf(2,3) void svc_printk(struct svc_rqst *rqstp, const char *fmt, .. dprintk("svc: svc_process dropit\n"); return 0; + close: + if (test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags)) + svc_close_xprt(rqstp->rq_xprt); + dprintk("svc: svc_process close\n"); + return 0; + err_short_len: svc_printk(rqstp, "short len %Zd, dropping request\n", argv->iov_len); - - goto dropit; /* drop request */ + goto close; err_bad_rpc: serv->sv_stats->rpcbadfmt++;