• H
    [IPV6]: Fix illegal dst locking in softirq context. · 6f4b6ec1
    Herbert Xu 提交于
    On Tue, Jan 31, 2006 at 10:24:32PM +0100, Ingo Molnar wrote:
    >
    >  [<c04de9e8>] _write_lock+0x8/0x10
    >  [<c0499015>] inet6_destroy_sock+0x25/0x100
    >  [<c04b8672>] tcp_v6_destroy_sock+0x12/0x20
    >  [<c046bbda>] inet_csk_destroy_sock+0x4a/0x150
    >  [<c047625c>] tcp_rcv_state_process+0xd4c/0xdd0
    >  [<c047d8e9>] tcp_v4_do_rcv+0xa9/0x340
    >  [<c047eabb>] tcp_v4_rcv+0x8eb/0x9d0
    
    OK this is definitely broken.  We should never touch the dst lock in
    softirq context.  Since inet6_destroy_sock may be called from that
    context due to the asynchronous nature of sockets, we can't take the
    lock there.
    
    In fact this sk_dst_reset is totally redundant since all IPv6 sockets
    use inet_sock_destruct as their socket destructor which always cleans
    up the dst anyway.  So the solution is to simply remove the call.
    Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    6f4b6ec1
af_inet6.c 21.5 KB