• Eric Dumazet's avatar
    tcp: fix tcp_unlink_write_queue() · 4a269818
    Eric Dumazet authored
    Yury reported crash with this signature :
    
    [  554.034021] [<ffff80003ccd5a58>] 0xffff80003ccd5a58
    [  554.034156] [<ffff00000888fd34>] skb_release_all+0x14/0x30
    [  554.034288] [<ffff00000888fd64>] __kfree_skb+0x14/0x28
    [  554.034409] [<ffff0000088ece6c>] tcp_sendmsg_locked+0x4dc/0xcc8
    [  554.034541] [<ffff0000088ed68c>] tcp_sendmsg+0x34/0x58
    [  554.034659] [<ffff000008919fd4>] inet_sendmsg+0x2c/0xf8
    [  554.034783] [<ffff0000088842e8>] sock_sendmsg+0x18/0x30
    [  554.034928] [<ffff0000088861fc>] SyS_sendto+0x84/0xf8
    
    Problem is that skb->destructor contains garbage, and this is
    because I accidentally removed tcp_skb_tsorted_anchor_cleanup()
    from tcp_unlink_write_queue()
    
    This would trigger with a write(fd, <invalid_memory>, len) attempt,
    and we will add to packetdrill this capability to avoid future
    regressions.
    
    Fixes: 75c119af ("tcp: implement rb-tree based retransmit queue")
    Reported-by: default avatarYury Norov <ynorov@caviumnetworks.com>
    Tested-by: default avatarYury Norov <ynorov@caviumnetworks.com>
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4a269818
tcp.h 63.1 KB