|
Message-ID: <CAHgaXdJW=-tprZtBcWBWxM1En-aCp4B++3DmoRyDKVAtqY6uuA@mail.gmail.com>
Date: Mon, 30 Jan 2017 15:46:47 +0530
From: Shubham Bansal <illusionist.neo@...il.com>
To: Kees Cook <keescook@...omium.org>, Daniel Borkmann <daniel@...earbox.net>,
Mircea Gherzan <mgherzan@...il.com>
Cc: netdev@...r.kernel.org, kernel-hardening@...ts.openwall.com,
linux@...linux.org.uk, linux-arm-kernel@...ts.infradead.org
Subject: arch: arm: bpf: Converting cBPF to eBPF for arm 32 bit
Hi all,
Just starting a new thread with proper heading on the main kernel hardening
and net-dev mailing list so that other people can be involved in this.
Please don't take this as a personal mail.
I am working on conversion of arm32 cBPF into eBPF JIT. I wanted some help,
regarding understanding of kernel code, from the dev available on the
mailing list. If you look at the ./arch/arm/net/bpf_jit_32.c code, you will
see jit_ctx structure. If anybody could help me understand what each fields
of this structure represent then it would be great.
Also, currently I am mapping the eBPF registers to arm 32 bit registers in
the following way.
static const int bpf2a32[] = {
>
> /* return value from in-kernel function, and exit value from eBPF
> */
> [BPF_REG_0] = ARM_R0,
>
> /* arguments from eBPF program to in-kernel function */
>
> [BPF_REG_1] = ARM_R1,
>
> [BPF_REG_2] = ARM_R2,
>
> [BPF_REG_3] = ARM_R3,
>
> [BPF_REG_4] = ARM_R4,
>
> [BPF_REG_5] = ARM_R5,
>
> /* callee saved registers that in-kernel function will preserve */
>
> [BPF_REG_6] = ARM_R6,
>
> [BPF_REG_7] = ARM_R7,
>
> [BPF_REG_8] = ARM_R8,
>
> [BPF_REG_9] = ARM_R9,
>
> /* Read only Frame Pointer to access Stack */
>
> [BPF_REG_FP] = ARM_FP,
>
> /* Temperory Register for internal BPF JIT */
>
> [TMP_REG_1] = ARM_R11,
>
> /* temporary register for blinding constants */
>
> [BPF_REG_AX] = ARM_R10,
>
> };
But I have some question if anybody could help with those.
- Currently, as eBPF uses 64 bit registers, I am mapping 64 bit eBPF
registers with 32 bit arm registers which looks wrong to me. Do anybody
have some idea about how to map eBPF->arm 32 bit registers ?
- Also, is my current mapping good enough to make the JIT fast enough ?
because as you might know, eBPF JIT mostly depends on 1-to-1 mapping of its
instructions with native instructions.
Appreciate the help from anybody from the mailing list.
Best,
Shubham Bansal
Content of type "text/html" skipped
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.