On Wed, Jan 05, 2022 at 06:25:33PM -0800, Song Liu wrote: > From: Song Liu <songliubraving@xxxxxx> > > Use bpf_prog_pack allocator in x86_64 jit. > > The program header from bpf_prog_pack is read only during the jit process. > Therefore, the binary is first written to a temporary buffer, and later > copied to final location with text_poke_jit(). > > Similarly, jit_fill_hole() is updated to fill the hole with 0xcc using > text_poke_jit(). > > Signed-off-by: Song Liu <songliubraving@xxxxxx> > --- > arch/x86/net/bpf_jit_comp.c | 131 +++++++++++++++++++++++++++--------- > 1 file changed, 100 insertions(+), 31 deletions(-) > > diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c > index fe4f08e25a1d..ad69a64ee4fe 100644 > --- a/arch/x86/net/bpf_jit_comp.c > +++ b/arch/x86/net/bpf_jit_comp.c > @@ -216,11 +216,33 @@ static u8 simple_alu_opcodes[] = { > [BPF_ARSH] = 0xF8, > }; > > +static char jit_hole_buffer[PAGE_SIZE] = {}; > + > static void jit_fill_hole(void *area, unsigned int size) > +{ > + struct bpf_binary_header *hdr = area; > + int i; > + > + for (i = 0; i < roundup(size, PAGE_SIZE); i += PAGE_SIZE) { > + int s; > + > + s = min_t(int, PAGE_SIZE, size - i); > + text_poke_jit(area + i, jit_hole_buffer, s); > + } > + > + /* bpf_jit_binary_alloc_pack cannot write size directly to the ro > + * mapping. Write it here with text_poke_jit(). > + */ Could we move this file towards regular comment style please? It's already mixed style, let's take the opportunity and not add more net-style comments. > + text_poke_jit(&hdr->size, &size, sizeof(size)); > +}