On 2022-03-03 14:59:47 [+0100], Toke Høiland-Jørgensen wrote: > Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> writes: > > > Since the commit mentioned below __xdp_reg_mem_model() can return a NULL > > pointer. This pointer is dereferenced in trace_mem_connect() which leads > > to segfault. It can be reproduced with enabled trace events during ifup. > > > > Only assign the arguments in the trace-event macro if `xa' is set. > > Otherwise set the parameters to 0. > > > > Fixes: 4a48ef70b93b8 ("xdp: Allow registering memory model without rxq reference") > > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > > Hmm, so before the commit you mention, the tracepoint wasn't triggered > at all in the code path that now sets xdp_alloc is NULL. So I'm > wondering if we should just do the same here? Is the trace event useful > in all cases? Correct. It says: | ip-1230 [003] ..... 3.053473: mem_connect: mem_id=0 mem_type=PAGE_SHARED allocator=0000000000000000 ifindex=2 > Alternatively, if we keep it, I think the mem.id and mem.type should be > available from rxq->mem, right? Yes, if these are the same things. In my case they are also 0: | ip-1245 [000] ..... 3.045684: mem_connect: mem_id=0 mem_type=PAGE_SHARED allocator=0000000000000000 ifindex=2 | ifconfig-1332 [003] ..... 21.030879: mem_connect: mem_id=0 mem_type=PAGE_SHARED allocator=0000000000000000 ifindex=3 So depends on what makes sense that tp can be skipped for xa == NULL or remain with __entry->mem_id = rxq->mem.id; __entry->mem_type = rxq->mem.type; __entry->allocator = xa ? xa->allocator : NULL; if it makes sense. > -Toke Sebastian