• Xin Long's avatar
    tipc: fix an use-after-free issue in tipc_recvmsg · cc19862f
    Xin Long authored
    syzbot reported an use-after-free crash:
    
      BUG: KASAN: use-after-free in tipc_recvmsg+0xf77/0xf90 net/tipc/socket.c:1979
      Call Trace:
       tipc_recvmsg+0xf77/0xf90 net/tipc/socket.c:1979
       sock_recvmsg_nosec net/socket.c:943 [inline]
       sock_recvmsg net/socket.c:961 [inline]
       sock_recvmsg+0xca/0x110 net/socket.c:957
       tipc_conn_rcv_from_sock+0x162/0x2f0 net/tipc/topsrv.c:398
       tipc_conn_recv_work+0xeb/0x190 net/tipc/topsrv.c:421
       process_one_work+0x98d/0x1630 kernel/workqueue.c:2276
       worker_thread+0x658/0x11f0 kernel/workqueue.c:2422
    
    As Hoang pointed out, it was caused by skb_cb->bytes_read still accessed
    after calling tsk_advance_rx_queue() to free the skb in tipc_recvmsg().
    
    This patch is to fix it by accessing skb_cb->bytes_read earlier than
    calling tsk_advance_rx_queue().
    
    Fixes: f4919ff5 ("tipc: keep the skb in rcv queue until the whole data is read")
    Reported-by: syzbot+e6741b97d5552f97c24d@syzkaller.appspotmail.com
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Acked-by: default avatarJon Maloy <jmaloy@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    cc19862f
socket.c 104 KB