Another regression in the af_alg series (s390x-specific)

From: Ondrej Mosnáček
Date: Thu Jul 13 2023 - 04:06:28 EST


Hi,

It turns out that beneath the first bug [1] there was another one
hiding. It seems to happen only on the s390x architecture when running
the following libkcapi [2] reproducer:

kcapi -x 2 -s -c "gcm(aes)" -i 0d92aa861746b324f20ee6b7 \
-k f4a6a5e5f2066f6dd9ec6fc5169c29043560ef595c9e81e76f42d29212cc581c \
-a "" -t 5f24c68cbe6f32c29652442bf5d483ad -q ""

Frequently (but not always) it triggers an oops like this one:

[ 3986.766763] Unable to handle kernel pointer dereference in virtual
kernel address space
[ 3986.766774] Failing address: 0000000a00000000 TEID: 0000000a00000803
[ 3986.766776] Fault in home space mode while using kernel ASCE.
[ 3986.766778] AS:00000000a43a0007 R3:0000000000000024
[ 3986.766825] Oops: 003b ilc:2 [#1] SMP
<snip>
[ 3986.766877] CPU: 0 PID: 271064 Comm: kcapi Tainted: G W
6.5.0-rc1 #1
[ 3986.767070] Hardware name: IBM 8561 LT1 400 (z/VM 7.2.0)
<snip>
[ 3986.767151] Call Trace:
[ 3986.767153] [<000003ff7fc3d47e>] gcm_walk_start+0x16/0x28 [aes_s390]
[ 3986.767160] [<00000000a2a342f2>] crypto_aead_decrypt+0x9a/0xb8
[ 3986.767166] [<00000000a2a60888>] aead_recvmsg+0x478/0x698
[ 3986.767169] [<00000000a2e519a0>] sock_recvmsg+0x70/0xb0
[ 3986.767175] [<00000000a2e51a56>] sock_read_iter+0x76/0xa0
[ 3986.767177] [<00000000a273e066>] vfs_read+0x26e/0x2a8
[ 3986.767182] [<00000000a273e8c4>] ksys_read+0xbc/0x100
[ 3986.767184] [<00000000a311d808>] __do_syscall+0x1d0/0x1f8
[ 3986.767189] [<00000000a312ff30>] system_call+0x70/0x98
[ 3986.767193] Last Breaking-Event-Address:
[ 3986.767193] [<000003ff7fc3e6b4>] gcm_aes_crypt+0x104/0xa68 [aes_s390]
[ 3986.767198] Kernel panic - not syncing: Fatal exception: panic_on_oops

This time the regression was bisected to:

commit c1abe6f570aff4b6d396dc551e60570d2f50bd79
Author: David Howells <dhowells@xxxxxxxxxx>
Date: Tue Jun 6 14:08:52 2023 +0100

crypto: af_alg: Use extract_iter_to_sg() to create scatterlists

I can't see what the problem is with the commit, so I'm reporting here
hoping that David or someone else can pick it up from here.

Cheers,
Ondrej

[1] https://lore.kernel.org/linux-crypto/CAAUqJDvFuvms55Td1c=XKv6epfRnnP78438nZQ-JKyuCptGBiQ@xxxxxxxxxxxxxx/T/
[2] https://github.com/smuellerDD/libkcapi/