On 10/4/19 10:03 PM, Alexei Starovoitov wrote:
> Pointer to BTF object is a pointer to kernel object or NULL.
> Such pointers can only be used by BPF_LDX instructions.
> The verifier changed their opcode from LDX|MEM|size
> to LDX|PROBE_MEM|size to make JITing easier.
> The number of entries in extable is the number of BPF_LDX insns
> that access kernel memory via "pointer to BTF type".

...

>               }
>               if (proglen == oldproglen) {
> -                     header = bpf_jit_binary_alloc(proglen, &image,
> -                                                   1, jit_fill_hole);
> +                     /*
> +                      * The number of entries in extable is the number of 
> BPF_LDX
> +                      * insns that access kernel memory via "pointer to BTF 
> type".
> +                      * The verifier changed their opcode from LDX|MEM|size
> +                      * to LDX|PROBE_MEM|size to make JITing easier.
> +                      */
> +                     u32 extable_size = prog->aux->num_exentries *
> +                             sizeof(struct exception_table_entry);
> +
> +                     /* allocate module memory for x86 insns and extable */
> +                     header = bpf_jit_binary_alloc(proglen + extable_size,
> +                                                   &image, 1, jit_fill_hole);
>                       if (!header) {
>                               prog = orig_prog;
>                               goto out_addrs;
>                       }
> +                     prog->aux->extable = (void *) image + proglen;

You might want to align ->extable to __alignof__(struct exception_table_entry) 
(4 bytes currently)

Reply via email to