123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- struct bpf_labels {
- int count;
- struct __bpf_label {
- const char *label;
- __u32 location;
- } labels[BPF_LABELS_MAX];
- };
- int bpf_resolve_jumps(struct bpf_labels *labels,
- struct sock_filter *filter, size_t count);
- __u32 seccomp_bpf_label(struct bpf_labels *labels, const char *label);
- void seccomp_bpf_print(struct sock_filter *filter, size_t count);
- BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW)
- BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_KILL)
- BPF_JUMP(BPF_JMP+BPF_JA, FIND_LABEL((labels), (label)), \
- JUMP_JT, JUMP_JF)
- BPF_JUMP(BPF_JMP+BPF_JA, FIND_LABEL((labels), (label)), \
- LABEL_JT, LABEL_JF)
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (nr), 0, 1), \
- jt
- union arg64 {
- struct {
- __u32 ENDIAN(lo32, hi32);
- };
- __u64 u64;
- };
- JEQ64(((union arg64){.u64 = (x)}).lo32, \
- ((union arg64){.u64 = (x)}).hi32, \
- EXPAND(jt))
- JGT64(((union arg64){.u64 = (x)}).lo32, \
- ((union arg64){.u64 = (x)}).hi32, \
- EXPAND(jt))
- JGE64(((union arg64){.u64 = (x)}).lo32, \
- ((union arg64){.u64 = (x)}).hi32, \
- EXPAND(jt))
- JNE64(((union arg64){.u64 = (x)}).lo32, \
- ((union arg64){.u64 = (x)}).hi32, \
- EXPAND(jt))
- JLT64(((union arg64){.u64 = (x)}).lo32, \
- ((union arg64){.u64 = (x)}).hi32, \
- EXPAND(jt))
- JLE64(((union arg64){.u64 = (x)}).lo32, \
- ((union arg64){.u64 = (x)}).hi32, \
- EXPAND(jt))
- JA64(((union arg64){.u64 = (x)}).lo32, \
- ((union arg64){.u64 = (x)}).hi32, \
- EXPAND(jt))
- BPF_STMT(BPF_LD+BPF_W+BPF_ABS, LO_ARG(idx))
- BPF_STMT(BPF_LD+BPF_W+BPF_ABS, LO_ARG(idx)), \
- BPF_STMT(BPF_ST, 0), \
- BPF_STMT(BPF_LD+BPF_W+BPF_ABS, HI_ARG(idx)), \
- BPF_STMT(BPF_ST, 1)
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (value), 0, 1), \
- jt
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (value), 1, 0), \
- jt
- BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, (value), 0, 1), \
- jt
- BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, (value), 0, 1), \
- jt
- BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, (value), 0, 1), \
- jt
- BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, (value), 1, 0), \
- jt
- BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, (value), 1, 0), \
- jt
- \
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (hi), 0, 5), \
- BPF_STMT(BPF_LD+BPF_MEM, 0), \
- \
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (lo), 0, 2), \
- BPF_STMT(BPF_LD+BPF_MEM, 1), \
- jt, \
- BPF_STMT(BPF_LD+BPF_MEM, 1)
- \
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (hi), 0, 3), \
- BPF_STMT(BPF_LD+BPF_MEM, 0), \
- \
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (lo), 2, 0), \
- BPF_STMT(BPF_LD+BPF_MEM, 1), \
- jt, \
- BPF_STMT(BPF_LD+BPF_MEM, 1)
- \
- BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, (hi), 3, 0), \
- BPF_STMT(BPF_LD+BPF_MEM, 0), \
- \
- BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, (lo), 0, 2), \
- BPF_STMT(BPF_LD+BPF_MEM, 1), \
- jt, \
- BPF_STMT(BPF_LD+BPF_MEM, 1)
- \
- BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, (hi), 4, 0), \
- \
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (hi), 0, 5), \
- BPF_STMT(BPF_LD+BPF_MEM, 0), \
- \
- BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, (lo), 0, 2), \
- BPF_STMT(BPF_LD+BPF_MEM, 1), \
- jt, \
- BPF_STMT(BPF_LD+BPF_MEM, 1)
- \
- BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, (hi), 4, 0), \
- \
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (hi), 0, 5), \
- BPF_STMT(BPF_LD+BPF_MEM, 0), \
- \
- BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, (lo), 0, 2), \
- BPF_STMT(BPF_LD+BPF_MEM, 1), \
- jt, \
- BPF_STMT(BPF_LD+BPF_MEM, 1)
- \
- BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, (hi), 0, 4), \
- \
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (hi), 0, 5), \
- BPF_STMT(BPF_LD+BPF_MEM, 0), \
- \
- BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, (lo), 2, 0), \
- BPF_STMT(BPF_LD+BPF_MEM, 1), \
- jt, \
- BPF_STMT(BPF_LD+BPF_MEM, 1)
- \
- BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, (hi), 0, 4), \
- \
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (hi), 0, 5), \
- BPF_STMT(BPF_LD+BPF_MEM, 0), \
- \
- BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, (lo), 2, 0), \
- BPF_STMT(BPF_LD+BPF_MEM, 1), \
- jt, \
- BPF_STMT(BPF_LD+BPF_MEM, 1)
- BPF_STMT(BPF_LD+BPF_W+BPF_ABS, \
- offsetof(struct seccomp_data, nr))
|