lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20190123064529.13518-1-jakub.kicinski@netronome.com> Date: Tue, 22 Jan 2019 22:45:17 -0800 From: Jakub Kicinski <jakub.kicinski@...ronome.com> To: alexei.starovoitov@...il.com, daniel@...earbox.net Cc: yhs@...com, netdev@...r.kernel.org, oss-drivers@...ronome.com, kafai@...com, Jakub Kicinski <jakub.kicinski@...ronome.com> Subject: [PATCH bpf-next v5 00/12] bpf: dead code elimination Hi! This set adds support for complete removal of dead code. Patch 3 contains all the code removal logic, patches 2 and 4 additionally optimize branches around and to dead code. Patches 6 and 7 allow offload JITs to take advantage of the optimization. After a few small clean ups (8, 9, 10) nfp support is added (11, 12). Removing code directly in the verifier makes it easy to adjust the relevant metadata (line info, subprogram info). JITs for code store constrained architectures would have hard time performing such adjustments at JIT level. Removing subprograms or line info is very hard once BPF core finished the verification. For user space to perform dead code removal it would have to perform the execution simulation/analysis similar to what the verifier does. v3: - fix uninitilized var warning in GCC 6 (buildbot). v4: - simplify the linfo-keeping logic (Yonghong). Instead of trying to figure out that we are removing first instruction of a subprogram, just always keep last dead line info, if first live instruction doesn't have one. v5: - improve comments (Martin Lau). Jakub Kicinski (12): bpf: change parameters of call/branch offset adjustment bpf: verifier: hard wire branches to dead code bpf: verifier: remove dead code bpf: verifier: remove unconditional branches by 0 selftests: bpf: add tests for dead code removal bpf: verifier: record original instruction index bpf: notify offload JITs about optimizations nfp: bpf: don't use instruction number for jump target nfp: bpf: split up the skip flag nfp: bpf: save original program length nfp: bpf: support optimizing dead branches nfp: bpf: support removing dead code drivers/net/ethernet/netronome/nfp/bpf/jit.c | 42 +- drivers/net/ethernet/netronome/nfp/bpf/main.h | 33 +- .../net/ethernet/netronome/nfp/bpf/offload.c | 9 +- .../net/ethernet/netronome/nfp/bpf/verifier.c | 74 +++- include/linux/bpf.h | 7 + include/linux/bpf_verifier.h | 6 + include/linux/filter.h | 1 + kernel/bpf/core.c | 52 ++- kernel/bpf/offload.c | 35 ++ kernel/bpf/verifier.c | 256 ++++++++++- tools/testing/selftests/bpf/test_btf.c | 396 +++++++++++++++++- tools/testing/selftests/bpf/test_verifier.c | 160 +++++++ 12 files changed, 1004 insertions(+), 67 deletions(-) -- 2.19.2
Powered by blists - more mailing lists