Skip to content

Commit 6aca583

Browse files
kknjhanakryiko
authored andcommitted
bpf: Streamline allowed helpers between tracing and base sets
Many conditional checks in switch-case are redundant with bpf_base_func_proto and should be removed. Regarding the permission checks bpf_base_func_proto: The permission checks in bpf_prog_load (as outlined below) ensure that the trace has both CAP_BPF and CAP_PERFMON capabilities, thus enabling the use of corresponding prototypes in bpf_base_func_proto without adverse effects. bpf_prog_load ...... bpf_cap = bpf_token_capable(token, CAP_BPF); ...... if (type != BPF_PROG_TYPE_SOCKET_FILTER && type != BPF_PROG_TYPE_CGROUP_SKB && !bpf_cap) goto put_token; ...... if (is_perfmon_prog_type(type) && !bpf_token_capable(token, CAP_PERFMON)) goto put_token; ...... Signed-off-by: Feng Yang <[email protected]> Signed-off-by: Andrii Nakryiko <[email protected]> Acked-by: Song Liu <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent 53ebef5 commit 6aca583

File tree

1 file changed

+0
-72
lines changed

1 file changed

+0
-72
lines changed

kernel/trace/bpf_trace.c

-72
Original file line numberDiff line numberDiff line change
@@ -1430,56 +1430,14 @@ bpf_tracing_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
14301430
const struct bpf_func_proto *func_proto;
14311431

14321432
switch (func_id) {
1433-
case BPF_FUNC_map_lookup_elem:
1434-
return &bpf_map_lookup_elem_proto;
1435-
case BPF_FUNC_map_update_elem:
1436-
return &bpf_map_update_elem_proto;
1437-
case BPF_FUNC_map_delete_elem:
1438-
return &bpf_map_delete_elem_proto;
1439-
case BPF_FUNC_map_push_elem:
1440-
return &bpf_map_push_elem_proto;
1441-
case BPF_FUNC_map_pop_elem:
1442-
return &bpf_map_pop_elem_proto;
1443-
case BPF_FUNC_map_peek_elem:
1444-
return &bpf_map_peek_elem_proto;
1445-
case BPF_FUNC_map_lookup_percpu_elem:
1446-
return &bpf_map_lookup_percpu_elem_proto;
1447-
case BPF_FUNC_ktime_get_ns:
1448-
return &bpf_ktime_get_ns_proto;
1449-
case BPF_FUNC_ktime_get_boot_ns:
1450-
return &bpf_ktime_get_boot_ns_proto;
1451-
case BPF_FUNC_tail_call:
1452-
return &bpf_tail_call_proto;
1453-
case BPF_FUNC_get_current_task:
1454-
return &bpf_get_current_task_proto;
1455-
case BPF_FUNC_get_current_task_btf:
1456-
return &bpf_get_current_task_btf_proto;
1457-
case BPF_FUNC_task_pt_regs:
1458-
return &bpf_task_pt_regs_proto;
14591433
case BPF_FUNC_get_current_uid_gid:
14601434
return &bpf_get_current_uid_gid_proto;
14611435
case BPF_FUNC_get_current_comm:
14621436
return &bpf_get_current_comm_proto;
1463-
case BPF_FUNC_trace_printk:
1464-
return bpf_get_trace_printk_proto();
14651437
case BPF_FUNC_get_smp_processor_id:
14661438
return &bpf_get_smp_processor_id_proto;
1467-
case BPF_FUNC_get_numa_node_id:
1468-
return &bpf_get_numa_node_id_proto;
14691439
case BPF_FUNC_perf_event_read:
14701440
return &bpf_perf_event_read_proto;
1471-
case BPF_FUNC_get_prandom_u32:
1472-
return &bpf_get_prandom_u32_proto;
1473-
case BPF_FUNC_probe_read_user:
1474-
return &bpf_probe_read_user_proto;
1475-
case BPF_FUNC_probe_read_kernel:
1476-
return security_locked_down(LOCKDOWN_BPF_READ_KERNEL) < 0 ?
1477-
NULL : &bpf_probe_read_kernel_proto;
1478-
case BPF_FUNC_probe_read_user_str:
1479-
return &bpf_probe_read_user_str_proto;
1480-
case BPF_FUNC_probe_read_kernel_str:
1481-
return security_locked_down(LOCKDOWN_BPF_READ_KERNEL) < 0 ?
1482-
NULL : &bpf_probe_read_kernel_str_proto;
14831441
#ifdef CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
14841442
case BPF_FUNC_probe_read:
14851443
return security_locked_down(LOCKDOWN_BPF_READ_KERNEL) < 0 ?
@@ -1489,44 +1447,20 @@ bpf_tracing_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
14891447
NULL : &bpf_probe_read_compat_str_proto;
14901448
#endif
14911449
#ifdef CONFIG_CGROUPS
1492-
case BPF_FUNC_cgrp_storage_get:
1493-
return &bpf_cgrp_storage_get_proto;
1494-
case BPF_FUNC_cgrp_storage_delete:
1495-
return &bpf_cgrp_storage_delete_proto;
14961450
case BPF_FUNC_current_task_under_cgroup:
14971451
return &bpf_current_task_under_cgroup_proto;
14981452
#endif
14991453
case BPF_FUNC_send_signal:
15001454
return &bpf_send_signal_proto;
15011455
case BPF_FUNC_send_signal_thread:
15021456
return &bpf_send_signal_thread_proto;
1503-
case BPF_FUNC_perf_event_read_value:
1504-
return &bpf_perf_event_read_value_proto;
1505-
case BPF_FUNC_ringbuf_output:
1506-
return &bpf_ringbuf_output_proto;
1507-
case BPF_FUNC_ringbuf_reserve:
1508-
return &bpf_ringbuf_reserve_proto;
1509-
case BPF_FUNC_ringbuf_submit:
1510-
return &bpf_ringbuf_submit_proto;
1511-
case BPF_FUNC_ringbuf_discard:
1512-
return &bpf_ringbuf_discard_proto;
1513-
case BPF_FUNC_ringbuf_query:
1514-
return &bpf_ringbuf_query_proto;
1515-
case BPF_FUNC_jiffies64:
1516-
return &bpf_jiffies64_proto;
15171457
case BPF_FUNC_get_task_stack:
15181458
return prog->sleepable ? &bpf_get_task_stack_sleepable_proto
15191459
: &bpf_get_task_stack_proto;
15201460
case BPF_FUNC_copy_from_user:
15211461
return &bpf_copy_from_user_proto;
15221462
case BPF_FUNC_copy_from_user_task:
15231463
return &bpf_copy_from_user_task_proto;
1524-
case BPF_FUNC_snprintf_btf:
1525-
return &bpf_snprintf_btf_proto;
1526-
case BPF_FUNC_per_cpu_ptr:
1527-
return &bpf_per_cpu_ptr_proto;
1528-
case BPF_FUNC_this_cpu_ptr:
1529-
return &bpf_this_cpu_ptr_proto;
15301464
case BPF_FUNC_task_storage_get:
15311465
if (bpf_prog_check_recur(prog))
15321466
return &bpf_task_storage_get_recur_proto;
@@ -1535,18 +1469,12 @@ bpf_tracing_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
15351469
if (bpf_prog_check_recur(prog))
15361470
return &bpf_task_storage_delete_recur_proto;
15371471
return &bpf_task_storage_delete_proto;
1538-
case BPF_FUNC_for_each_map_elem:
1539-
return &bpf_for_each_map_elem_proto;
1540-
case BPF_FUNC_snprintf:
1541-
return &bpf_snprintf_proto;
15421472
case BPF_FUNC_get_func_ip:
15431473
return &bpf_get_func_ip_proto_tracing;
15441474
case BPF_FUNC_get_branch_snapshot:
15451475
return &bpf_get_branch_snapshot_proto;
15461476
case BPF_FUNC_find_vma:
15471477
return &bpf_find_vma_proto;
1548-
case BPF_FUNC_trace_vprintk:
1549-
return bpf_get_trace_vprintk_proto();
15501478
default:
15511479
break;
15521480
}

0 commit comments

Comments
 (0)