diff options
author | David Howells <dhowells@redhat.com> | 2019-10-07 10:58:29 +0100 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2019-10-07 11:05:05 +0100 |
commit | 91fcfbe8852edb929ff8702534525031a15d0aa6 (patch) | |
tree | b2e93c89b0e500684338283cb37b22bfb4f34d95 /net/rxrpc/sendmsg.c | |
parent | 9ebeddef58c41bd700419cdcece24cf64ce32276 (diff) | |
download | linux-91fcfbe8852edb929ff8702534525031a15d0aa6.tar.gz linux-91fcfbe8852edb929ff8702534525031a15d0aa6.tar.bz2 linux-91fcfbe8852edb929ff8702534525031a15d0aa6.zip |
rxrpc: Fix call crypto state cleanup
Fix the cleanup of the crypto state on a call after the call has been
disconnected. As the call has been disconnected, its connection ref has
been discarded and so we can't go through that to get to the security ops
table.
Fix this by caching the security ops pointer in the rxrpc_call struct and
using that when freeing the call security state. Also use this in other
places we're dealing with call-specific security.
The symptoms look like:
BUG: KASAN: use-after-free in rxrpc_release_call+0xb2d/0xb60
net/rxrpc/call_object.c:481
Read of size 8 at addr ffff888062ffeb50 by task syz-executor.5/4764
Fixes: 1db88c534371 ("rxrpc: Fix -Wframe-larger-than= warnings from on-stack crypto")
Reported-by: syzbot+eed305768ece6682bb7f@syzkaller.appspotmail.com
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc/sendmsg.c')
-rw-r--r-- | net/rxrpc/sendmsg.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c index 22f51a7e356e..813fd6888142 100644 --- a/net/rxrpc/sendmsg.c +++ b/net/rxrpc/sendmsg.c @@ -419,7 +419,7 @@ static int rxrpc_send_data(struct rxrpc_sock *rx, call->tx_winsize) sp->hdr.flags |= RXRPC_MORE_PACKETS; - ret = conn->security->secure_packet( + ret = call->security->secure_packet( call, skb, skb->mark, skb->head); if (ret < 0) goto out; |