On Mon, Jun 15, 2020 at 6:55 PM Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > > > > int fork_usermode_blob(void *data, size_t len, struct umh_info *info); > > > > > > The function fork_usermode_blob is passed an array and a length. Today > > that array is stored in .rodata. Not in a init section where it could > > be discared. > > It's a one line change in bpfilter_umh_blob.S to make it .init section, > but for bpfilter init may not work. > For some ko init is appropriate for some other it's not. since I remember discussing the desire to have only one copy of the blob with Andy back then I did a bit of git archeology. Sure enough it was in .init.rodata when usermode_blob() landed. But then commit 61fbf5933d42 ("net: bpfilter: restart bpfilter_umh when error occurred") added blob restart logic. It's kinda questionable whether bpfilter needs restart or not. But because the kernel module now starts the blob multiple times it had to move them from .init.rodata to .rodata. Regardless the point is that init or not-init is a decision of a particular kernel module.