Files
Linux/crypto
David Howells b6d972f689 crypto: af_alg/hash: Fix recvmsg() after sendmsg(MSG_MORE)
If an AF_ALG socket bound to a hashing algorithm is sent a zero-length
message with MSG_MORE set and then recvmsg() is called without first
sending another message without MSG_MORE set to end the operation, an oops
will occur because the crypto context and result doesn't now get set up in
advance because hash_sendmsg() now defers that as long as possible in the
hope that it can use crypto_ahash_digest() - and then because the message
is zero-length, it the data wrangling loop is skipped.

Fix this by handling zero-length sends at the top of the hash_sendmsg()
function.  If we're not continuing the previous sendmsg(), then just ignore
the send (hash_recvmsg() will invent something when called); if we are
continuing, then we finalise the request at this point if MSG_MORE is not
set to get any error here, otherwise the send is of no effect and can be
ignored.

Whilst we're at it, remove the code to create a kvmalloc'd scatterlist if
we get more than ALG_MAX_PAGES - this shouldn't happen.

Fixes: c662b043cd ("crypto: af_alg/hash: Support MSG_SPLICE_PAGES")
Reported-by: [email protected]
Link: https://lore.kernel.org/r/[email protected]/
Reported-by: [email protected]
Link: https://lore.kernel.org/r/[email protected]/
Reported-by: [email protected]
Link: https://lore.kernel.org/r/[email protected]/
Reported-by: [email protected]
Link: https://lore.kernel.org/r/[email protected]/
Signed-off-by: David Howells <[email protected]>
Reported-and-tested-by: [email protected]
cc: Jens Axboe <[email protected]>
cc: Matthew Wilcox <[email protected]>
Acked-by: Herbert Xu <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
2023-06-20 12:10:36 -07:00
..
…
2023-04-20 18:20:04 +08:00
2022-03-03 10:49:20 +12:00
2021-03-26 19:55:55 +11:00
2023-02-14 13:39:33 +08:00
2023-04-20 18:20:04 +08:00
2023-04-20 18:20:04 +08:00
…
…
…
…
…
2020-02-28 08:43:21 +08:00
2023-02-14 13:39:33 +08:00
…
2022-12-02 18:12:40 +08:00
2022-04-08 16:12:46 +08:00
2022-12-02 18:12:40 +08:00
2022-06-10 16:40:16 +08:00
2021-11-08 16:55:21 -08:00