Andrey Ignatov
5e43f899b0
bpf: Check attach type at prog load time
...
== The problem ==
There are use-cases when a program of some type can be attached to
multiple attach points and those attach points must have different
permissions to access context or to call helpers.
E.g. context structure may have fields for both IPv4 and IPv6 but it
doesn't make sense to read from / write to IPv6 field when attach point
is somewhere in IPv4 stack.
Same applies to BPF-helpers: it may make sense to call some helper from
some attach point, but not from other for same prog type.
== The solution ==
Introduce `expected_attach_type` field in in `struct bpf_attr` for
`BPF_PROG_LOAD` command. If scenario described in "The problem" section
is the case for some prog type, the field will be checked twice:
1) At load time prog type is checked to see if attach type for it must
be known to validate program permissions correctly. Prog will be
rejected with EINVAL if it's the case and `expected_attach_type` is
not specified or has invalid value.
2) At attach time `attach_type` is compared with `expected_attach_type`,
if prog type requires to have one, and, if they differ, attach will
be rejected with EINVAL.
The `expected_attach_type` is now available as part of `struct bpf_prog`
in both `bpf_verifier_ops->is_valid_access()` and
`bpf_verifier_ops->get_func_proto()` () and can be used to check context
accesses and calls to helpers correspondingly.
Initially the idea was discussed by Alexei Starovoitov <ast@fb.com> and
Daniel Borkmann <daniel@iogearbox.net> here:
https://marc.info/?l=linux-netdev&m=152107378717201&w=2
Signed-off-by: Andrey Ignatov <rdna@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2018-03-31 02:14:44 +02:00
..
bpf
bpf: Check attach type at prog load time
2018-03-31 02:14:44 +02:00
cgroup
cgroup: fix rule checking for threaded mode switching
2018-02-21 11:39:22 -08:00
configs
KVM changes for 4.16
2018-02-10 13:16:35 -08:00
debug
signal: Simplify and fix kdb_send_sig
2018-01-03 18:01:08 -06:00
events
perf/core: Fix ctx_event_type in ctx_resched()
2018-03-09 08:03:02 +01:00
gcov
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
irq
genirq/matrix: Handle CPU offlining proper
2018-02-22 22:05:43 +01:00
livepatch
Merge branch 'for-4.16/remove-immediate' into for-linus
2018-01-31 16:36:38 +01:00
locking
rtmutex: Make rt_mutex_futex_unlock() safe for irq-off callsites
2018-03-09 11:06:16 +01:00
power
x86/power: Fix swsusp_arch_resume prototype
2018-02-02 23:33:50 +01:00
printk
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk
2018-03-01 10:06:39 -08:00
rcu
SCSI misc on 20180131
2018-01-31 11:23:28 -08:00
sched
Merge branch 'for-4.16-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
2018-03-19 15:39:02 -07:00
time
timers: Forward timer base before migrating timers
2018-02-28 23:34:33 +01:00
trace
bpf: Check attach type at prog load time
2018-03-31 02:14:44 +02:00
.gitignore
acct.c
kernel/acct.c: fix the acct->needcheck check in check_free_space()
2018-01-04 16:45:09 -08:00
async.c
kernel/async.c: revert "async: simplify lowest_in_progress()"
2018-02-06 18:32:44 -08:00
audit.c
net: Convert audit_net_ops
2018-02-13 10:36:06 -05:00
audit.h
audit/stable-4.15 PR 20171113
2017-11-15 13:28:48 -08:00
audit_fsnotify.c
audit_tree.c
Merge branch 'fsnotify' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
2017-11-14 14:08:20 -08:00
audit_watch.c
auditfilter.c
audit: filter PATH records keyed on filesystem magic
2017-11-10 16:08:56 -05:00
auditsc.c
audit/stable-4.15 PR 20171113
2017-11-15 13:28:48 -08:00
backtracetest.c
bounds.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
capability.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
compat.c
signals: Move put_compat_sigset to compat.h to silence hardened usercopy
2018-03-02 21:31:55 +00:00
configs.c
context_tracking.c
cpu.c
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2017-12-31 12:30:34 -08:00
cpu_pm.c
crash_core.c
kdump: write correct address of mem_section into vmcoreinfo
2018-01-13 10:42:48 -08:00
crash_dump.c
cred.c
delayacct.c
delayacct: Account blkio completion on the correct task
2018-01-16 03:29:36 +01:00
dma.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
elfcore.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
exec_domain.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
exit.c
kernel/exit.c: export abort() to modules
2018-01-04 16:45:09 -08:00
extable.c
extable: Make init_kernel_text() global
2018-02-21 16:54:06 +01:00
fail_function.c
error-injection: Fix to prohibit jump optimization
2018-03-12 16:16:00 +01:00
fork.c
include/linux/sched/mm.h: re-inline mmdrop()
2018-02-21 15:35:42 -08:00
freezer.c
futex.c
pids: introduce find_get_task_by_vpid() helper
2018-02-06 18:32:46 -08:00
futex_compat.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
groups.c
kernel: make groups_sort calling a responsibility group_info allocators
2017-12-14 16:00:49 -08:00
hung_task.c
irq_work.c
irq/work: Improve the flag definitions
2018-01-08 19:43:15 +01:00
jump_label.c
jump_label: Fix sparc64 warning
2018-03-14 16:35:26 +01:00
kallsyms.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk
2018-02-01 13:36:15 -08:00
kcmp.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
Kconfig.freezer
Kconfig.hz
Kconfig.locks
Kconfig.preempt
kcov.c
kcov: detect double association with a single task
2018-02-06 18:32:46 -08:00
kexec.c
kexec_core.c
kexec_file.c
resource: Provide resource struct in resource walk callback
2017-11-07 15:35:57 +01:00
kexec_internal.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
kmod.c
kprobes.c
kprobes: Propagate error from disarm_kprobe_ftrace()
2018-02-16 09:12:58 +01:00
ksysfs.c
kthread.c
treewide: Remove TIMER_FUNC_TYPE and TIMER_DATA_TYPE casts
2017-11-21 16:35:54 -08:00
latencytop.c
Makefile
error-injection: Support fault injection framework
2018-01-12 17:33:38 -08:00
memremap.c
kernel/memremap: Remove stale devres_free() call
2018-03-06 10:58:54 -08:00
module-internal.h
module.c
module: propagate error in modules_open()
2018-03-08 21:58:51 +01:00
module_signing.c
notifier.c
nsproxy.c
padata.c
padata: add SPDX identifier
2018-01-05 18:43:00 +11:00
panic.c
bug: use %pB in BUG and stack protector failure
2018-03-09 16:40:01 -08:00
params.c
pid.c
pids: introduce find_get_task_by_vpid() helper
2018-02-06 18:32:46 -08:00
pid_namespace.c
pid: remove pidhash
2017-11-17 16:10:04 -08:00
profile.c
ptrace.c
pids: introduce find_get_task_by_vpid() helper
2018-02-06 18:32:46 -08:00
range.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
reboot.c
kernel/reboot.c: add devm_register_reboot_notifier()
2017-11-17 16:10:04 -08:00
relay.c
kernel/relay.c: limit kmalloc size to KMALLOC_MAX_SIZE
2018-02-21 15:35:43 -08:00
resource.c
Merge branch 'akpm' (patches from Andrew)
2018-02-06 22:15:42 -08:00
seccomp.c
- Fix seccomp GET_METADATA to deal with field sizes correctly (Tycho Andersen)
2018-02-22 10:50:24 -08:00
signal.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/livepatching
2018-01-31 13:02:18 -08:00
smp.c
smp/core: Use lockdep to assert IRQs are disabled/enabled
2017-11-08 11:13:50 +01:00
smpboot.c
smpboot.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
softirq.c
softirq: Eliminate cond_resched_rcu_qs() in favor of cond_resched()
2017-12-04 10:28:58 -08:00
stacktrace.c
stop_machine.c
sys.c
fix typo in assignment of fs default overflow gid
2017-12-14 16:01:45 -06:00
sys_ni.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
sysctl.c
pipe: reject F_SETPIPE_SZ with size over UINT_MAX
2018-02-06 18:32:47 -08:00
sysctl_binary.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
task_work.c
locking/barriers: Convert users of lockless_dereference() to READ_ONCE()
2017-12-17 13:57:15 +01:00
taskstats.c
pids: introduce find_get_task_by_vpid() helper
2018-02-06 18:32:46 -08:00
test_kprobes.c
kprobes: Disable the jprobes test code
2017-10-20 11:02:54 +02:00
torture.c
torture: Save a line in stutter_wait(): while -> for
2017-12-11 09:18:30 -08:00
tracepoint.c
tracepoint: Remove smp_read_barrier_depends() from comment
2017-12-04 10:52:56 -08:00
tsacct.c
ucount.c
uid16.c
kernel: make groups_sort calling a responsibility group_info allocators
2017-12-14 16:00:49 -08:00
umh.c
kernel/umh.c: optimize 'proc_cap_handler()'
2017-11-17 16:10:01 -08:00
up.c
user-return-notifier.c
user.c
efivarfs: Limit the rate for non-root to read files
2018-02-22 10:21:02 -08:00
user_namespace.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
2017-11-16 12:20:15 -08:00
utsname.c
utsname_sysctl.c
watchdog.c
Merge branch 'linus' into sched/core, to pick up fixes
2017-11-08 10:17:15 +01:00
watchdog_hld.c
Merge branch 'linus' into core/urgent, to pick up dependent commits
2017-11-04 08:53:04 +01:00
workqueue.c
workqueue: remove unused cancel_work()
2018-03-13 13:37:42 -07:00
workqueue_internal.h
Merge branch 'for-4.14-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
2017-11-06 12:26:49 -08:00