linux/net/sunrpc
Chuck Lever 5f24a8725f SUNRPC: Fix a crash in gss_krb5_checksum()
Anna says:
> KASAN reports [...] a slab-out-of-bounds in gss_krb5_checksum(),
> and it can cause my client to panic when running cthon basic
> tests with krb5p.

> Running faddr2line gives me:
>
> gss_krb5_checksum+0x4b6/0x630:
> ahash_request_free at
> /home/anna/Programs/linux-nfs.git/./include/crypto/hash.h:619
> (inlined by) gss_krb5_checksum at
> /home/anna/Programs/linux-nfs.git/net/sunrpc/auth_gss/gss_krb5_crypto.c:358

My diagnosis is that the memcpy() at the end of gss_krb5_checksum()
reads past the end of the buffer containing the checksum data
because the callers have ignored gss_krb5_checksum()'s API contract:

 * Caller provides the truncation length of the output token (h) in
 * cksumout.len.

Instead they provide the fixed length of the hmac buffer. This
length happens to be larger than the value returned by
crypto_ahash_digestsize().

Change these errant callers to work like krb5_etm_{en,de}crypt().
As a defensive measure, bound the length of the byte copy at the
end of gss_krb5_checksum().

Kunit sez:
Testing complete. Ran 68 tests: passed: 68
Elapsed time: 81.680s total, 5.875s configuring, 75.610s building, 0.103s running

Reported-by: Anna Schumaker <schumaker.anna@gmail.com>
Fixes: 8270dbfceb ("SUNRPC: Obscure Kerberos integrity keys")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
2023-03-22 16:58:26 -04:00
..
auth_gss SUNRPC: Fix a crash in gss_krb5_checksum() 2023-03-22 16:58:26 -04:00
xprtrdma SUNRPC: Remove ->xpo_secure_port() 2023-02-20 09:20:55 -05:00
.kunitconfig SUNRPC: Add KDF-HMAC-SHA2 Kunit tests 2023-02-20 09:20:51 -05:00
addr.c nfsd: don't alloc under spinlock in rpc_parse_scope_id 2021-09-21 17:51:47 -04:00
auth_null.c
auth_unix.c SUNRPC: Fix unx_lookup_cred() allocation 2022-03-22 15:52:55 -04:00
auth.c NFS client updates for Linux 5.20 2022-08-10 14:04:32 -07:00
backchannel_rqst.c NFS client updates for Linux 5.20 2022-08-10 14:04:32 -07:00
cache.c treewide: use get_random_u32_below() instead of deprecated function 2022-11-18 02:15:15 +01:00
clnt.c SUNRPC: Fix missing release socket in rpc_sockname() 2022-12-06 12:21:38 -05:00
debugfs.c SUNRPC: Cache deferral injection 2022-05-19 12:25:38 -04:00
fail.h SUNRPC: Cache deferral injection 2022-05-19 12:25:38 -04:00
Kconfig SUNRPC: Add KUnit tests for rpcsec_krb5.ko 2023-02-20 09:20:46 -05:00
Makefile sunrpc: Create a sunrpc directory under /sys/kernel/ 2021-07-08 14:03:23 -04:00
netns.h SUNRPC: Fix occasional warning when destroying gss_krb5_enctypes 2023-02-20 09:20:57 -05:00
rpc_pipe.c fs: allocate inode by using alloc_inode_sb() 2022-03-22 15:57:03 -07:00
rpcb_clnt.c SUNRPC: Make the rpciod and xprtiod slab allocation modes consistent 2022-03-22 15:52:55 -04:00
sched.c NFS Client Updates for Linux 6.1 2022-10-13 09:58:42 -07:00
socklib.c use less confusing names for iov_iter direction initializers 2022-11-25 13:01:55 -05:00
socklib.h SUNRPC: Refactor xs_sendpages() 2020-03-16 12:04:33 -04:00
stats.c SUNRPC: Use per-CPU counters to tally server RPC counts 2023-02-20 09:20:32 -05:00
sunrpc_syms.c sunrpc: add IDs to multipath 2021-07-08 14:03:23 -04:00
sunrpc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_149.RULE 2022-06-10 14:51:35 +02:00
svc_xprt.c SUNRPC: Remove ->xpo_secure_port() 2023-02-20 09:20:55 -05:00
svc.c SUNRPC: Fix a server shutdown leak 2023-03-08 08:46:41 -05:00
svcauth_unix.c SUNRPC: Fix whitespace damage in svcauth_unix.c 2023-02-20 09:20:52 -05:00
svcauth.c SUNRPC: Hoist init_decode out of svc_authenticate() 2023-02-20 09:20:19 -05:00
svcsock.c SUNRPC: Remove ->xpo_secure_port() 2023-02-20 09:20:55 -05:00
sysctl.c net/sunrpc: fix useless comparison in proc_do_xprt() 2020-11-08 16:28:25 -05:00
sysfs.c kobject: make kobject_get_ownership() take a constant kobject * 2022-11-22 17:34:29 +01:00
sysfs.h SUNRPC: take a xprt offline using sysfs 2021-07-08 14:03:24 -04:00
timer.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
xdr.c SUNRPC: Add XDR encoding helper for opaque_auth 2023-02-20 09:20:27 -05:00
xprt.c timers: Get rid of del_singleshot_timer_sync() 2022-11-24 15:09:10 +01:00
xprtmultipath.c SUNRPC: Directly use ida_alloc()/free() 2022-10-03 11:26:36 -04:00
xprtsock.c Treewide: Stop corrupting socket's task_frag 2022-12-19 17:28:49 -08:00