• Zhu Yanjun's avatar
    IB/rxe: avoid double kfree_skb · 3fbbdb44
    Zhu Yanjun authored
    [ Upstream commit 9fd4350b ]
    
    When skb is sent, it will pass the following functions in soft roce.
    
    rxe_send [rdma_rxe]
        ip_local_out
            __ip_local_out
            ip_output
                ip_finish_output
                    ip_finish_output2
                        dev_queue_xmit
                            __dev_queue_xmit
                                dev_hard_start_xmit
    
    In the above functions, if error occurs in the above functions or
    iptables rules drop skb after ip_local_out, kfree_skb will be called.
    So it is not necessary to call kfree_skb in soft roce module again.
    Or else crash will occur.
    
    The steps to reproduce:
    
         server                       client
        ---------                    ---------
        |1.1.1.1|<----rxe-channel--->|1.1.1.2|
        ---------                    ---------
    
    On server: rping -s -a 1.1.1.1 -v -C 10000 -S 512
    On client: rping -c -a 1.1.1.1 -v -C 10000 -S 512
    
    The kernel configs CONFIG_DEBUG_KMEMLEAK and
    CONFIG_DEBUG_OBJECTS are enabled on both server and client.
    
    When rping runs, run the following command in server:
    
    iptables -I OUTPUT -p udp  --dport 4791 -j DROP
    
    Without this patch, crash will occur.
    
    CC: Srinivas Eeda <srinivas.eeda@oracle.com>
    CC: Junxiao Bi <junxiao.bi@oracle.com>
    Signed-off-by: default avatarZhu Yanjun <yanjun.zhu@oracle.com>
    Reviewed-by: default avatarYuval Shaia <yuval.shaia@oracle.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3fbbdb44
rxe_req.c 18.7 KB