|
21 | 21 | #else |
22 | 22 | # error "Target architecture is unsupported by seccomp." |
23 | 23 | #endif |
24 | | -static const unsigned int sock_filter_policy_fd_genesi_tile_instr_cnt = 14; |
| 24 | +static const unsigned int sock_filter_policy_fd_genesi_tile_instr_cnt = 26; |
25 | 25 |
|
26 | | -static void populate_sock_filter_policy_fd_genesi_tile( ulong out_cnt, struct sock_filter * out, unsigned int logfile_fd ) { |
27 | | - FD_TEST( out_cnt >= 14 ); |
28 | | - struct sock_filter filter[14] = { |
| 26 | +static void populate_sock_filter_policy_fd_genesi_tile( ulong out_cnt, struct sock_filter * out, unsigned int logfile_fd, unsigned int genesis_fd ) { |
| 27 | + FD_TEST( out_cnt >= 26 ); |
| 28 | + struct sock_filter filter[26] = { |
29 | 29 | /* Check: Jump to RET_KILL_PROCESS if the script's arch != the runtime arch */ |
30 | 30 | BPF_STMT( BPF_LD | BPF_W | BPF_ABS, ( offsetof( struct seccomp_data, arch ) ) ), |
31 | | - BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, ARCH_NR, 0, /* RET_KILL_PROCESS */ 10 ), |
| 31 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, ARCH_NR, 0, /* RET_KILL_PROCESS */ 22 ), |
32 | 32 | /* loading syscall number in accumulator */ |
33 | 33 | BPF_STMT( BPF_LD | BPF_W | BPF_ABS, ( offsetof( struct seccomp_data, nr ) ) ), |
34 | 34 | /* allow write based on expression */ |
35 | | - BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_write, /* check_write */ 2, 0 ), |
| 35 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_write, /* check_write */ 6, 0 ), |
36 | 36 | /* allow fsync based on expression */ |
37 | | - BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_fsync, /* check_fsync */ 5, 0 ), |
| 37 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_fsync, /* check_fsync */ 9, 0 ), |
| 38 | + /* allow fstat based on expression */ |
| 39 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_fstat, /* check_fstat */ 10, 0 ), |
| 40 | + /* allow close based on expression */ |
| 41 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_close, /* check_close */ 11, 0 ), |
| 42 | + /* allow read based on expression */ |
| 43 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_read, /* check_read */ 12, 0 ), |
| 44 | + /* allow exit based on expression */ |
| 45 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_exit, /* check_exit */ 13, 0 ), |
38 | 46 | /* none of the syscalls matched */ |
39 | | - { BPF_JMP | BPF_JA, 0, 0, /* RET_KILL_PROCESS */ 6 }, |
| 47 | + { BPF_JMP | BPF_JA, 0, 0, /* RET_KILL_PROCESS */ 14 }, |
40 | 48 | // check_write: |
41 | 49 | /* load syscall argument 0 in accumulator */ |
42 | 50 | BPF_STMT( BPF_LD | BPF_W | BPF_ABS, offsetof(struct seccomp_data, args[0])), |
43 | | - BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, 2, /* RET_ALLOW */ 5, /* lbl_1 */ 0 ), |
| 51 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, 2, /* RET_ALLOW */ 13, /* lbl_1 */ 0 ), |
44 | 52 | // lbl_1: |
45 | 53 | /* load syscall argument 0 in accumulator */ |
46 | 54 | BPF_STMT( BPF_LD | BPF_W | BPF_ABS, offsetof(struct seccomp_data, args[0])), |
47 | | - BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, logfile_fd, /* RET_ALLOW */ 3, /* RET_KILL_PROCESS */ 2 ), |
| 55 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, logfile_fd, /* RET_ALLOW */ 11, /* RET_KILL_PROCESS */ 10 ), |
48 | 56 | // check_fsync: |
49 | 57 | /* load syscall argument 0 in accumulator */ |
50 | 58 | BPF_STMT( BPF_LD | BPF_W | BPF_ABS, offsetof(struct seccomp_data, args[0])), |
51 | | - BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, logfile_fd, /* RET_ALLOW */ 1, /* RET_KILL_PROCESS */ 0 ), |
| 59 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, logfile_fd, /* RET_ALLOW */ 9, /* RET_KILL_PROCESS */ 8 ), |
| 60 | +// check_fstat: |
| 61 | + /* load syscall argument 0 in accumulator */ |
| 62 | + BPF_STMT( BPF_LD | BPF_W | BPF_ABS, offsetof(struct seccomp_data, args[0])), |
| 63 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, genesis_fd, /* RET_ALLOW */ 7, /* RET_KILL_PROCESS */ 6 ), |
| 64 | +// check_close: |
| 65 | + /* load syscall argument 0 in accumulator */ |
| 66 | + BPF_STMT( BPF_LD | BPF_W | BPF_ABS, offsetof(struct seccomp_data, args[0])), |
| 67 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, genesis_fd, /* RET_ALLOW */ 5, /* RET_KILL_PROCESS */ 4 ), |
| 68 | +// check_read: |
| 69 | + /* load syscall argument 0 in accumulator */ |
| 70 | + BPF_STMT( BPF_LD | BPF_W | BPF_ABS, offsetof(struct seccomp_data, args[0])), |
| 71 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, genesis_fd, /* RET_ALLOW */ 3, /* RET_KILL_PROCESS */ 2 ), |
| 72 | +// check_exit: |
| 73 | + /* load syscall argument 0 in accumulator */ |
| 74 | + BPF_STMT( BPF_LD | BPF_W | BPF_ABS, offsetof(struct seccomp_data, args[0])), |
| 75 | + BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, 0, /* RET_ALLOW */ 1, /* RET_KILL_PROCESS */ 0 ), |
52 | 76 | // RET_KILL_PROCESS: |
53 | 77 | /* KILL_PROCESS is placed before ALLOW since it's the fallthrough case. */ |
54 | 78 | BPF_STMT( BPF_RET | BPF_K, SECCOMP_RET_KILL_PROCESS ), |
|
0 commit comments