Re: npf panic - need some clues

Taylor R Campbell <[email protected]>
Newsgroups gmane.os.netbsd.ports.arm,gmane.os.netbsd.devel.network
Message-ID <[email protected]>
> Date: Thu, 12 Oct 2023 00:09:29 +0000 (UTC)
> From: John Klos <[email protected]>
> 
> Does anyone have any clue about what's happening here, and what to check / 
> try in the future?
> 
> [ 2828128.148194] panic: Trap: Data Abort (EL1): Translation Fault L0 with 
> write access for 0000000000000000: pc ffffc00000595da4: stp x27, x19, [x0]

This is a null pointer dereference.

> [ 2828128.331272] fp ffffc00255d37760 stage_mem_gc() at ffffc00000595da4 
> netbsd:stage_mem_gc+0x54

It happened at stage_mem_gc+0x54, which I bet is subr_thmap.c line
933:

    932 	gc = kmem_intr_alloc(sizeof(thmap_gc_t), KM_NOSLEEP);
    933 	gc->addr = addr;
    934 	gc->len = len;

https://nxr.netbsd.org/xref/src/sys/kern/subr_thmap.c?r=1.13#933

This on its face is wrong -- use KM_NOSLEEP, must tolerate allocation
failure.

Unfortunately, it can't be changed to KM_SLEEP instead as it is
currently used; either the algorithm must be changed or the caller
must be reorganized.

> [ 2828128.339342] fp ffffc00255d377d0 thmap_del() at ffffc000005976b0 
> netbsd:thmap_del+0x530
> [ 2828128.339342] fp ffffc00255d378d0 npf_conndb_remove() at 
> ffffc00000344f34 netbsd:npf_conndb_remove+0x40
> [ 2828128.355048] fp ffffc00255d37900 npf_conn_establish() at 
> ffffc00000342a8c netbsd:npf_conn_establish+0x28c
> [ 2828128.364679] fp ffffc00255d37990 npfk_packet_handler() at 
> ffffc0000033a5c4 netbsd:npfk_packet_handler+0x4d4
> [ 2828128.374970] fp ffffc00255d37aa0 pfil_run_hooks() at ffffc0000066c4e0 
> netbsd:pfil_run_hooks+0x110
> [ 2828128.384681] fp ffffc00255d37b50 ipintr() at ffffc000002cd87c 
> netbsd:ipintr+0x318
> [ 2828128.394683] fp ffffc00255d37d00 softint_dispatch() at 
> ffffc000005589a8 netbsd:softint_dispatch+0xf4

Problems:

- thmap_del can't tolerate allocation failure unless the API is
  changed to report back failure itself, but...
- npf_conndb_remove can't handle failure of thmap_del anyway in this
  error branch, so it really needs to block until enough memory is
  freed that the allocation can succeed, but...
- All this logic runs in soft interrupt context where blocking is
  forbidden.

The issue is reported and analyzed here:

https://github.com/rmind/npf/issues/129
https://gnats.netbsd.org/57208

Unfortunately nobody has gotten a round tuit.

(Nothing Arm-specific about this -- it's an npf/thmap bug.)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.