• J. Bruce Fields's avatar
    SUNRPC: fix sign error causing rpcsec_gss drops · 2ba5acfb
    J. Bruce Fields authored
    If sd_max is unsigned, then sd_max - GSS_SEQ_WIN is a very large number
    whenever sd_max is less than GSS_SEQ_WIN, and the comparison:
    
    	seq_num <= sd->sd_max - GSS_SEQ_WIN
    
    in gss_check_seq_num is pretty much always true, even when that's
    clearly not what was intended.
    
    This was causing pynfs to hang when using krb5, because pynfs uses zero
    as the initial gss sequence number.  That's perfectly legal, but this
    logic error causes knfsd to drop the rpc in that case.  Out-of-order
    sequence IDs in the first GSS_SEQ_WIN (128) calls will also cause this.
    
    Fixes: 10b9d99a
    
     ("SUNRPC: Augment server-side rpcgss tracepoints")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    2ba5acfb
svcauth_gss.c 49.2 KB