SEC("?tc")
__failure __msg("function calls are not allowed while holding a lock") int reject_tail_call_spin_lock(struct __sk_buff *ctx)
{
bpf_spin_lock(&lock);
bpf_tail_call_static(ctx, &jmp_table, 0); return 0;
}
SEC("?tc")
__failure __msg("tail_call cannot be used inside bpf_rcu_read_lock-ed region") int reject_tail_call_rcu_lock(struct __sk_buff *ctx)
{
bpf_rcu_read_lock();
bpf_tail_call_static(ctx, &jmp_table, 0);
bpf_rcu_read_unlock(); return 0;
}
SEC("?tc")
__failure __msg("tail_call cannot be used inside bpf_preempt_disable-ed region") int reject_tail_call_preempt_lock(struct __sk_buff *ctx)
{
bpf_guard_preempt();
bpf_tail_call_static(ctx, &jmp_table, 0); return 0;
}
SEC("?tc")
__failure __msg("tail_call would lead to reference leak") int reject_tail_call_ref(struct __sk_buff *ctx)
{ struct foo { int i; } *p;
p = bpf_obj_new(typeof(*p));
bpf_tail_call_static(ctx, &jmp_table, 0); return 0;
}
char _license[] SEC("license") = "GPL";
Messung V0.5
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.