]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
carp: Widen epoch coverage
authorKristof Provost <kp@FreeBSD.org>
Sun, 12 Apr 2020 16:09:21 +0000 (16:09 +0000)
committerKristof Provost <kp@FreeBSD.org>
Sun, 12 Apr 2020 16:09:21 +0000 (16:09 +0000)
commit1d126e9b947405fe9dea89ef564d42e89fc6e814
tree443faa6d01ee27ff4224a704ee8d0acf7ca5dd07
parentc3ca3130e213bba30a6c95819e2dc500493bb86e
carp: Widen epoch coverage

Fix panics related to calling code which expects to be running inside
the NET_EPOCH from outside that epoch.

This leads to panics (with INVARIANTS) such as this one:

    panic: Assertion in_epoch(net_epoch_preempt) failed at /usr/src/sys/netinet/if_ether.c:373
    cpuid = 7
    time = 1586095719
    KDB: stack backtrace:
    db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe0090819700
    vpanic() at vpanic+0x182/frame 0xfffffe0090819750
    panic() at panic+0x43/frame 0xfffffe00908197b0
    arprequest_internal() at arprequest_internal+0x59e/frame 0xfffffe00908198c0
    arp_announce_ifaddr() at arp_announce_ifaddr+0x20/frame 0xfffffe00908198e0
    carp_master_down_locked() at carp_master_down_locked+0x10d/frame 0xfffffe0090819910
    carp_master_down() at carp_master_down+0x79/frame 0xfffffe0090819940
    softclock_call_cc() at softclock_call_cc+0x13f/frame 0xfffffe00908199f0
    softclock() at softclock+0x7c/frame 0xfffffe0090819a20
    ithread_loop() at ithread_loop+0x279/frame 0xfffffe0090819ab0
    fork_exit() at fork_exit+0x80/frame 0xfffffe0090819af0
    fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe0090819af0
    --- trap 0, rip = 0, rsp = 0, rbp = 0 ---

Widen the NET_EPOCH to cover the relevant (callback / task) code.

Differential Revision: https://reviews.freebsd.org/D24302
sys/netinet/ip_carp.c