summaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2023-03-22 22:01:34 +0300
committerChuck Lever <chuck.lever@oracle.com>2023-03-22 23:58:26 +0300
commit5f24a8725fe7bc2c6adf7ce00dd3e818387d8995 (patch)
tree51b1b8d3a00bbf156b8fe6752790b5fad14e19f6 /init
parent27c934dd8832dd40fd34776f916dc201e18b319b (diff)
downloadlinux-5f24a8725fe7bc2c6adf7ce00dd3e818387d8995.tar.xz
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: 8270dbfcebea ("SUNRPC: Obscure Kerberos integrity keys") Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Diffstat (limited to 'init')
0 files changed, 0 insertions, 0 deletions