On Tue, Jan 10, 2023 at 4:10 AM Jiri Olsa <olsaj...@gmail.com> wrote: > On Fri, Jan 06, 2023 at 10:43:59AM -0500, Paul Moore wrote: > > When changing the ebpf program put() routines to support being called > > from within IRQ context the program ID was reset to zero prior to > > calling the perf event and audit UNLOAD record generators, which > > resulted in problems as the ebpf program ID was bogus (always zero). > > This patch addresses this problem by removing an unnecessary call to > > bpf_prog_free_id() in __bpf_prog_offload_destroy() and adjusting > > __bpf_prog_put() to only call bpf_prog_free_id() after audit and perf > > have finished their bpf program unload tasks in > > bpf_prog_put_deferred(). For the record, no one can determine, or > > remember, why it was necessary to free the program ID, and remove it > > from the IDR, prior to executing bpf_prog_put_deferred(); > > regardless, both Stanislav and Alexei agree that the approach in this > > patch should be safe. > > > > It is worth noting that when moving the bpf_prog_free_id() call, the > > do_idr_lock parameter was forced to true as the ebpf devs determined > > this was the correct as the do_idr_lock should always be true. The > > do_idr_lock parameter will be removed in a follow-up patch, but it > > was kept here to keep the patch small in an effort to ease any stable > > backports. > > > > I also modified the bpf_audit_prog() logic used to associate the > > AUDIT_BPF record with other associated records, e.g. @ctx != NULL. > > Instead of keying off the operation, it now keys off the execution > > context, e.g. '!in_irg && !irqs_disabled()', which is much more > > appropriate and should help better connect the UNLOAD operations with > > the associated audit state (other audit records). > > > > Cc: sta...@vger.kernel.org > > Fixes: d809e134be7a ("bpf: Prepare bpf_prog_put() to be called from irq > > context.") > > Reported-by: Burn Alting <burn.alt...@iinet.net.au> > > Reported-by: Jiri Olsa <olsaj...@gmail.com> > > Suggested-by: Stanislav Fomichev <s...@google.com> > > Suggested-by: Alexei Starovoitov <alexei.starovoi...@gmail.com> > > Signed-off-by: Paul Moore <p...@paul-moore.com> > > > > --- > > * v3 > > - abandon most of the changes in v2 > > - move bpf_prog_free_id() after the audit/perf unload hooks > > - remove bpf_prog_free_id() from __bpf_prog_offload_destroy() > > - added stable tag > > fwiw I checked and the perf UNLOAD events have proper id now > thanks for fixing this
No problem, thanks for verifying that this solves the perf problem too. -- paul-moore.com -- Linux-audit mailing list Linux-audit@redhat.com https://listman.redhat.com/mailman/listinfo/linux-audit