On Tue, Jan 02, 2024 at 03:45:10PM +0000, Stuart Henderson wrote:
> panic: rw_enter: netlock locking against myself
> Stopped at    db_enter+0x14:  popq    %rbp
>     TID    PID    UID     PRFLAGS     PFLAGS  CPU  COMMAND
> *388963  11506    755         0x2          0    0  snmpbulkwalk
>  320140  61046      0     0x14000      0x200    1  reaper
> db_enter() at db_enter+0x14
> panic(ffffffff820ebaaa) at panic+0xc3
> rw_enter(ffffffff824bd2d0,2) at rw_enter+0x252
> hv_kvp(ffffffff8248d738) at hv_kvp+0x705
> hv_event_intr(ffff80000008d000) at hv_event_intr+0x1ab
> hv_intr() at hv_intr+0x1a
> Xresume_hyperv_upcall() at Xresume_hyperv_upcall+0x27
> Xspllower() at Xspllower+0x1d
> task_add(ffff800000036200,ffff8000001533c0) at task_add+0x83
> if_enqueue_ifq(ffff800000153060,fffffd80f6642900) at if_enqueue_ifq+0x6f
> ether_output(ffff800000153060,fffffd80f6642900,fffffd80c8ef5c78,fffffd811e6414d8)
>  at ether_output+0x82
> if_output_tso(ffff800000153060,ffff800025395d08,fffffd80c8ef5c78,fffffd811e6414d8,5dc)
>  at if_output_tso+0xe1
> ip_output(fffffd80f6642900,0,fffffd80c8ef5c68,0,0,fffffd80c8ef5bf0,1da98542b9d8f733)
>  at ip_output+0x817
> udp_output(fffffd80c8ef5bf0,fffffd80b468b400,fffffd80ac452c00,0) at 
> udp_output+0x3be
> end trace frame: 0xffff800025395ee0, count: 0
> https://www.openbsd.org/ddb.html describes the minimum info required in bug
> reports.  Insufficient info makes it difficult to find and fix bugs.
> ddb{0}> Stopped at    x86_ipi_db+0x16:        leave
> x86_ipi_db(ffff80002250dff0) at x86_ipi_db+0x16
> x86_ipi_handler() at x86_ipi_handler+0x80
> Xresume_lapic_ipi() at Xresume_lapic_ipi+0x27
> _kernel_lock() at _kernel_lock+0xc2
> reaper(ffff80002473c008) at reaper+0x133
> end trace frame: 0x0, count: 10

It is caused by this commit.

----------------------------
revision 1.20
date: 2023/09/23 13:01:12;  author: mvs;  state: Exp;  lines: +5 -9;  commitid:
Gj5WdkySyube1RkO;
Use shared netlock to protect if_list and ifa_list walkthrough and ifnet
data access within kvp_get_ip_info().

ok bluhm
----------------------------

Net lock must not be acquired in interrupt context.  It is wrong
that hv tries to perform network operations from interrupt context.
Actually it does not do much networking, it is just reads some
interface addresses.  The kernel lock that was used before is also
questionable.  Maybe some writers do not hold it anymore.  There
was much conversion from kernel to net lock.

bluhm

Reply via email to