• David Howells's avatar
    rxrpc: Fix trace-after-put looking at the put peer record · 55f6c98e
    David Howells authored
    rxrpc_put_peer() calls trace_rxrpc_peer() after it has done the decrement
    of the refcount - which looks at the debug_id in the peer record.  But
    unless the refcount was reduced to zero, we no longer have the right to
    look in the record and, indeed, it may be deleted by some other thread.
    
    Fix this by getting the debug_id out before decrementing the refcount and
    then passing that into the tracepoint.
    
    This can cause the following symptoms:
    
        BUG: KASAN: use-after-free in __rxrpc_put_peer net/rxrpc/peer_object.c:411
        [inline]
        BUG: KASAN: use-after-free in rxrpc_put_peer+0x685/0x6a0
        net/rxrpc/peer_object.c:435
        Read of size 8 at addr ffff888097ec0058 by task syz-executor823/24216
    
    Fixes: 1159d4b4 ("rxrpc: Add a tracepoint to track rxrpc_peer refcounting")
    Reported-by: syzbot+b9be979c55f2bea8ed30@syzkaller.appspotmail.com
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    55f6c98e
rxrpc.h 42.1 KB