]> git.baikalelectronics.ru Git - kernel.git/commit
rxrpc: Fix call ref leak
authorDavid Howells <dhowells@redhat.com>
Mon, 7 Oct 2019 09:58:28 +0000 (10:58 +0100)
committerDavid Howells <dhowells@redhat.com>
Mon, 7 Oct 2019 09:58:28 +0000 (10:58 +0100)
commit38214b530f8c2463122e51a26447095ba84cb0be
treeb864145eb5b004ab745794403514d98fe487dee9
parent13bf28ca6a72ad9966cfdacf150d5fc5c0e053b4
rxrpc: Fix call ref leak

When sendmsg() finds a call to continue on with, if the call is in an
inappropriate state, it doesn't release the ref it just got on that call
before returning an error.

This causes the following symptom to show up with kasan:

BUG: KASAN: use-after-free in rxrpc_send_keepalive+0x8a2/0x940
net/rxrpc/output.c:635
Read of size 8 at addr ffff888064219698 by task kworker/0:3/11077

where line 635 is:

whdr.epoch = htonl(peer->local->rxnet->epoch);

The local endpoint (which cannot be pinned by the call) has been released,
but not the peer (which is pinned by the call).

Fix this by releasing the call in the error path.

Fixes: afa7bcda904c ("rxrpc: Fix potential NULL-pointer exception")
Reported-by: syzbot+d850c266e3df14da1d31@syzkaller.appspotmail.com
Signed-off-by: David Howells <dhowells@redhat.com>
net/rxrpc/sendmsg.c