• Xin Long's avatar
    tipc: move bc link creation back to tipc_node_create · cb8092d7
    Xin Long authored
    Shuang Li reported a NULL pointer dereference crash:
    
      [] BUG: kernel NULL pointer dereference, address: 0000000000000068
      [] RIP: 0010:tipc_link_is_up+0x5/0x10 [tipc]
      [] Call Trace:
      []  <IRQ>
      []  tipc_bcast_rcv+0xa2/0x190 [tipc]
      []  tipc_node_bc_rcv+0x8b/0x200 [tipc]
      []  tipc_rcv+0x3af/0x5b0 [tipc]
      []  tipc_udp_recv+0xc7/0x1e0 [tipc]
    
    It was caused by the 'l' passed into tipc_bcast_rcv() is NULL. When it
    creates a node in tipc_node_check_dest(), after inserting the new node
    into hashtable in tipc_node_create(), it creates the bc link. However,
    there is a gap between this insert and bc link creation, a bc packet
    may come in and get the node from the hashtable then try to dereference
    its bc link, which is NULL.
    
    This patch is to fix it by moving the bc link creation before inserting
    into the hashtable.
    
    Note that for a preliminary node becoming "real", the bc link creation
    should also be called before it's rehashed, as we don't create it for
    preliminary nodes.
    
    Fixes: 4cbf8ac2 ("tipc: enable creating a "preliminary" node")
    Reported-by: default avatarShuang Li <shuali@redhat.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>
    cb8092d7
node.c 79 KB