linux/net/sunrpc
Tomáš Trnka b36205bd6c sunrpc: fix stripping of padded MIC tokens
[ Upstream commit c0cb8bf3a8 ]

The length of the GSS MIC token need not be a multiple of four bytes.
It is then padded by XDR to a multiple of 4 B, but unwrap_integ_data()
would previously only trim mic.len + 4 B. The remaining up to three
bytes would then trigger a check in nfs4svc_decode_compoundargs(),
leading to a "garbage args" error and mount failure:

nfs4svc_decode_compoundargs: compound not properly padded!
nfsd: failed to decode arguments!

This would prevent older clients using the pre-RFC 4121 MIC format
(37-byte MIC including a 9-byte OID) from mounting exports from v3.9+
servers using krb5i.

The trimming was introduced by commit 4c190e2f91 ("sunrpc: trim off
trailing checksum before returning decrypted or integrity authenticated
buffer").

Fixes: 4c190e2f91 "unrpc: trim off trailing checksum..."
Signed-off-by: Tomáš Trnka <ttrnka@mail.muni.cz>
Cc: stable@vger.kernel.org
Acked-by: Jeff Layton <jlayton@poochiereds.net>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
History 2016-06-06 19:11:11 -04:00
..
auth_gss sunrpc: fix stripping of padded MIC tokens 2016-06-06 19:11:11 -04:00
xprtrdma svcrdma: Fix send_reply() scatter/gather set-up 2015-10-27 22:13:29 -04:00
addr.c replace strict_strto calls 2014-07-12 18:45:49 -04:00
auth.c SUNRPC: remove all refcounting of groupinfo from rpcauth_lookupcred 2014-08-04 09:22:08 -04:00
auth_generic.c sunrpc/auth: allow lockless (rcu) lookup of credential cache. 2014-08-03 17:14:12 -04:00
auth_null.c sunrpc/auth: allow lockless (rcu) lookup of credential cache. 2014-08-03 17:14:12 -04:00
auth_unix.c SUNRPC refactor rpcauth_checkverf error returns 2013-09-03 15:25:09 -04:00
backchannel_rqst.c SUNRPC: Fix a memory leak in the backchannel code 2015-07-03 23:02:23 -04:00
bc_svc.c SUNRPC: remove BUG_ON from bc_send 2012-11-04 14:43:41 -05:00
cache.c sunrpc/cache: fix off-by-one in qword_get() 2016-03-08 01:14:06 -05:00
clnt.c SUNRPC: NULL utsname dereference on NFS umount during namespace cleanup 2015-03-06 14:52:58 -08:00
Kconfig xprtrdma: add separate Kconfig options for NFSoRDMA client and server support 2014-03-28 18:02:12 -04:00
Makefile xprtrdma: add separate Kconfig options for NFSoRDMA client and server support 2014-03-28 18:02:12 -04:00
netns.h Merge branch 'for-3.14' of git://linux-nfs.org/~bfields/linux 2014-01-30 10:18:43 -08:00
rpc_pipe.c rpc_pipe: Drop memory allocation cast 2014-07-12 18:43:44 -04:00
rpcb_clnt.c SUNRPC: NULL utsname dereference on NFS umount during namespace cleanup 2015-03-06 14:52:58 -08:00
sched.c NFS/SUNRPC: Remove other deadlock-avoidance mechanisms in nfs_release_page() 2014-09-25 08:25:47 -04:00
socklib.c net: Save software checksum complete 2014-06-11 15:46:13 -07:00
stats.c SUNRPC: Deprecate rpc_client->cl_protname 2013-08-30 09:19:34 -04:00
sunrpc.h SUNRPC: track whether a request is coming from a loop-back interface. 2014-05-22 15:59:18 -04:00
sunrpc_syms.c sunrpc: create a new dummy pipe for gssd to hold open 2013-12-06 13:06:30 -05:00
svc.c SUNRPC: get rid of the request wait queue 2014-08-17 12:00:11 -04:00
svc_xprt.c SUNRPC: Fix compile on non-x86 2014-08-28 15:51:35 -04:00
svcauth.c nfsd4: better reservation of head space for krb5 2014-05-30 17:32:17 -04:00
svcauth_unix.c svcrpc: fix failures to handle -1 uid's 2013-07-08 17:27:23 -04:00
svcsock.c SUNRPC: Fix locking around callback channel reply receive 2014-11-19 12:03:20 -05:00
sysctl.c net: Convert uses of typedef ctl_table to struct ctl_table 2013-06-13 02:36:09 -07:00
timer.c net: cleanup unsigned to unsigned int 2012-04-15 12:44:40 -04:00
xdr.c rpc: fix xdr_truncate_encode to handle buffer ending on page boundary 2015-01-16 06:59:55 -08:00
xprt.c NFS client updates for Linux 3.17 2014-08-13 18:13:19 -06:00
xprtsock.c NFS/SUNRPC: Remove other deadlock-avoidance mechanisms in nfs_release_page() 2014-09-25 08:25:47 -04:00