linux-hardened/net/sunrpc
Jeff Layton cd123012d9 RPC: add wrapper for svc_reserve to account for checksum
When the kernel calls svc_reserve to downsize the expected size of an RPC
reply, it fails to account for the possibility of a checksum at the end of
the packet.  If a client mounts a NFSv2/3 with sec=krb5i/p, and does I/O
then you'll generally see messages similar to this in the server's ring
buffer:

RPC request reserved 164 but used 208

While I was never able to verify it, I suspect that this problem is also
the root cause of some oopses I've seen under these conditions:

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=227726

This is probably also a problem for other sec= types and for NFSv4.  The
large reserved size for NFSv4 compound packets seems to generally paper
over the problem, however.

This patch adds a wrapper for svc_reserve that accounts for the possibility
of a checksum.  It also fixes up the appropriate callers of svc_reserve to
call the wrapper.  For now, it just uses a hardcoded value that I
determined via testing.  That value may need to be revised upward as things
change, or we may want to eventually add a new auth_op that attempts to
calculate this somehow.

Unfortunately, there doesn't seem to be a good way to reliably determine
the expected checksum length prior to actually calculating it, particularly
with schemes like spkm3.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Acked-by: Neil Brown <neilb@suse.de>
Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
Acked-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-05-09 12:30:54 -07:00
..
auth_gss spkm3: initialize hash 2007-05-02 07:37:07 -07:00
auth.c Merge branch 'master' of /home/trondmy/kernel/linux-2.6/ 2007-02-12 22:43:25 -08:00
auth_null.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
auth_unix.c SUNRPC: fix print format for tk_pid 2007-02-03 15:35:10 -08:00
cache.c [SUNRPC]: cleanup: use seq_release_private() where appropriate 2007-04-26 01:03:43 -07:00
clnt.c SUNRPC: RPC client should retry with different versions of rpcbind 2007-04-30 22:17:16 -07:00
Makefile SUNRPC: remove old portmapper 2007-04-30 22:17:15 -07:00
rpc_pipe.c slab allocators: Remove SLAB_DEBUG_INITIAL flag 2007-05-07 12:12:57 -07:00
rpcb_clnt.c SUNRPC: introduce rpcbind: replacement for in-kernel portmapper 2007-04-30 22:17:12 -07:00
sched.c Fix sunrpc warning noise 2007-05-08 12:03:19 -07:00
socklib.c [NET]: Treat CHECKSUM_PARTIAL as CHECKSUM_UNNECESSARY 2007-04-25 22:28:43 -07:00
stats.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sunrpc_syms.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
svc.c RPC: add wrapper for svc_reserve to account for checksum 2007-05-09 12:30:54 -07:00
svcauth.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
svcauth_unix.c knfsd: rename sk_defer_lock to sk_lock 2007-05-09 12:30:54 -07:00
svcsock.c knfsd: rename sk_defer_lock to sk_lock 2007-05-09 12:30:54 -07:00
sysctl.c [PATCH] sysctl: remove insert_at_head from register_sysctl 2007-02-14 08:09:59 -08:00
timer.c SUNRPC: remove extraneous header inclusions 2006-09-22 23:24:47 -04:00
xdr.c [NET] SUNRPC: Fix whitespace errors. 2007-02-10 23:20:13 -08:00
xprt.c SUNRPC: introduce rpcbind: replacement for in-kernel portmapper 2007-04-30 22:17:12 -07:00
xprtsock.c SUNRPC: switch socket-based RPC transports to use rpcbind 2007-04-30 22:17:13 -07:00