On Thu, Apr 21, 2022 at 12:41 PM Song Liu <song@xxxxxxxxxx> wrote: > > The extra logic I had in the original patch was to erase the memory > when a BPF program is freed. In this case, the memory will be > returned to the bpf_prog_pack, and stays as RO+X. Actually, I > am not quite sure whether we need this logic. If not, we only need > the much simpler version. Oh, I think it would be good to do at free time too. I just would want that to use the same function we already have for the allocation-time thing, instead of introducing completely new infrastructure. That was what looked very odd to me. Now, the _smallest_ patch would likely be to just save away that 'bpf_fill_ill_insns' function pointer in the 'struct bpf_prog_pack' thing. It's admittedly kind of silly to do, but it matches that whole silly "let's pass around a function pointer to a fixed function" model at allocation time. I say that's silly, because it's a fixed architecture function and we could just call it directly. The only valid function there is jit_fill_hole(), and the only reason it uses that function pointer seems to be that it's never been exposed as a real function. So passing it along as a function seems to be _purely_ for the silly reason that people haven't agreed on a name, and different architectures use different names (ie power uses 'bpf_jit_fill_ill_insns()', RISC-V calls it 'bpf_fill_ill_insns()', and everybody else seems to use 'jit_fill_hole'. I don't know why that decision was made. It looks like a bad one to me, honestly. Why not just agree on a name - I suggest 'bpf_jit_fill_hole()' - and just get rid of that stupid 'bpf_jit_fill_hole_t' type name that only exists because of this thing? The bpf headers seem to literally have agreed on a name for that function -type- only in order to be able to disagree on the name of the function -name-, and then pass it along as a function pointer argument instead of just calling it directly. Very counter-productive. Linus