• H
    [NETFILTER]: Fix deadlock with ip_queue and tcp local input path. · 9bb7bc94
    Harald Welte 提交于
    When we have ip_queue being used from LOCAL_IN, then we end up with a
    situation where the verdicts coming back from userspace traverse the TCP
    input path from syscall context.  While this seems to work most of the
    time, there's an ugly deadlock:
    
    syscall context is interrupted by the timer interrupt.  When the timer
    interrupt leaves, the timer softirq get's scheduled and calls
    tcp_delack_timer() and alike.  They themselves do bh_lock_sock(sk),
    which is already held from somewhere else -> boom.
    
    I've now tested the suggested solution by Patrick McHardy and Herbert Xu to
    simply use local_bh_{en,dis}able().
    Signed-off-by: NHarald Welte <laforge@netfilter.org>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    9bb7bc94
ip_queue.c 16.3 KB