linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "J. Bruce Fields" <bfields@fieldses.org>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: Linux NFS Mailing List <linux-nfs@vger.kernel.org>, bcodding@redhat.com
Subject: Re: [PATCH] svcauth_gss: Revert 64c59a3726f2 ("Remove unnecessary allocation")
Date: Wed, 7 Sep 2016 10:47:27 -0400	[thread overview]
Message-ID: <20160907144727.GB4364@fieldses.org> (raw)
In-Reply-To: <B18D986B-5CC2-4D73-AD9C-525DBB4B93AD@oracle.com>

On Tue, Sep 06, 2016 at 05:25:38PM -0400, Chuck Lever wrote:
> 
> > On Sep 6, 2016, at 5:01 PM, J. Bruce Fields <bfields@fieldses.org> wrote:
> > 
> > On Tue, Sep 06, 2016 at 04:49:33PM -0400, Chuck Lever wrote:
> >> 
> >> On Sep 6, 2016, at 4:42 PM, J. Bruce Fields <bfields@fieldses.org> wrote:
> >>> Apologies, I wasn't thinking when I wrote that patch.  The problem is
> >>> probably that rsc_lookup steals the passed-in memory to avoid doing an
> >>> allocation of its own, so we can't just pass in a pointer to memory that
> >>> someone else is using....
> >>> 
> >>> If we really want to avoid allocation there then maybe we should
> >>> preallocate somwhere, or reference count these handles.
> >>> 
> >>> For now reverting sounds like the right thing to do.
> >> 
> >> NP, thanks for confirming!
> >> 
> >> 
> >>> Ben, did you ever confirm whether this helped with the problem you were
> >>> seeing?  (If I remember correctly, unnpredictable delays here could
> >>> cause the request to be dropped if later requests push the rpcsec_gss
> >>> sequence window too far.)  If so then we could look into reference
> >>> counting.
> >> 
> >> Well that's interesting.
> >> 
> >> When a request is dropped, would the server disconnect? Because if it
> >> doesn't, the client will wait forever.
> > 
> > Checking... gss_verify_header returns SVC_DROP, which is just a silent
> > close (SVC_CLOSE would close the connection).
> > 
> > I'm not sure what's correct there.
> 
> Right, we may not get any guidance from the RPCSEC GSS specifications.

Yeah, it won't say anything about disconnecting.  It does require the
drop, and gives rationale:

	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.

I'm trying to think of disadvantages to dropping:

	- an attacker can force a disconnect.  But if they can sniff the
	  network and inject packets then they can already break TCP
	  connections.
	- replays due to networking bugs get turned into unnecessary
	  disconnections.  But, do those actually happen, especially
	  over TCP?

So, OK, disconnect.

> 
> However, the Linux NFS client retransmit code was changed in 2013 so that
> NFSv4 never retransmits until the server drops the connection, starting
> around commit 8a19a0b6cb2e2216afd68ef2047f30260cc8a220.
> 
> SVC_CLOSE might be a better choice, at least for NFSv4.

Ugh.  I don't like sticking an NFSv4-specific exception here in the rpc
code, but that's probably right.  We'll need to check for where else
this is needed.

--b.

      parent reply	other threads:[~2016-09-07 14:47 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-01 14:50 [PATCH] svcauth_gss: Revert 64c59a3726f2 ("Remove unnecessary allocation") Chuck Lever
2016-09-06 20:42 ` J. Bruce Fields
2016-09-06 20:49   ` Chuck Lever
2016-09-06 21:01     ` J. Bruce Fields
2016-09-06 21:25       ` Chuck Lever
2016-09-06 23:49         ` Benjamin Coddington
2016-09-07 14:35           ` Chuck Lever
2016-09-13 20:39           ` J. Bruce Fields
2016-09-07 14:47         ` J. Bruce Fields [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160907144727.GB4364@fieldses.org \
    --to=bfields@fieldses.org \
    --cc=bcodding@redhat.com \
    --cc=chuck.lever@oracle.com \
    --cc=linux-nfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).