• Xin Long's avatar
    tipc: re-fetch skb cb after tipc_msg_validate · 3067bc61
    Xin Long authored
    As the call trace shows, the original skb was freed in tipc_msg_validate(),
    and dereferencing the old skb cb would cause an use-after-free crash.
    
      BUG: KASAN: use-after-free in tipc_crypto_rcv_complete+0x1835/0x2240 [tipc]
      Call Trace:
       <IRQ>
       tipc_crypto_rcv_complete+0x1835/0x2240 [tipc]
       tipc_crypto_rcv+0xd32/0x1ec0 [tipc]
       tipc_rcv+0x744/0x1150 [tipc]
      ...
      Allocated by task 47078:
       kmem_cache_alloc_node+0x158/0x4d0
       __alloc_skb+0x1c1/0x270
       tipc_buf_acquire+0x1e/0xe0 [tipc]
       tipc_msg_create+0x33/0x1c0 [tipc]
       tipc_link_build_proto_msg+0x38a/0x2100 [tipc]
       tipc_link_timeout+0x8b8/0xef0 [tipc]
       tipc_node_timeout+0x2a1/0x960 [tipc]
       call_timer_fn+0x2d/0x1c0
      ...
      Freed by task 47078:
       tipc_msg_validate+0x7b/0x440 [tipc]
       tipc_crypto_rcv_complete+0x4b5/0x2240 [tipc]
       tipc_crypto_rcv+0xd32/0x1ec0 [tipc]
       tipc_rcv+0x744/0x1150 [tipc]
    
    This patch fixes it by re-fetching the skb cb from the new allocated skb
    after calling tipc_msg_validate().
    
    Fixes: fc1b6d6d ("tipc: introduce TIPC encryption & authentication")
    Reported-by: default avatarShuang Li <shuali@redhat.com>
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Link: https://lore.kernel.org/r/1b1cdba762915325bd8ef9a98d0276eb673df2a5.1669398403.git.lucien.xin@gmail.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    3067bc61
crypto.c 65.8 KB