]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
enosys: optimize bytecode when no ioctls are blocked
authorThomas Weißschuh <thomas@t-8ch.de>
Sat, 3 Feb 2024 17:55:13 +0000 (18:55 +0100)
committerThomas Weißschuh <thomas@t-8ch.de>
Sun, 4 Feb 2024 09:29:54 +0000 (10:29 +0100)
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
misc-utils/enosys.c

index 622240001a06351cb35ea9aae114a4e420dc04c8..7c9afa768fadfb815438d5d79f27780a38c89e7c 100644 (file)
@@ -222,17 +222,19 @@ int main(int argc, char **argv)
                INSTR(BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ERRNO | ENOSYS));
        }
 
-       INSTR(BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_ioctl, 1, 0));
-       INSTR(BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW));
-
-       list_for_each(loop_ctr, &blocked_ioctls) {
-               blocked = list_entry(loop_ctr, struct blocked_number, head);
-
-               INSTR(BPF_STMT(BPF_LD | BPF_W | BPF_ABS, syscall_arg_lower32(1)));
-               INSTR(BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, (uint64_t) blocked->number, 0, 3));
-               INSTR(BPF_STMT(BPF_LD | BPF_W | BPF_ABS, syscall_arg_upper32(1)));
-               INSTR(BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, (uint64_t) blocked->number >> 32, 0, 1));
-               INSTR(BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ERRNO | ENOTTY));
+       if (!list_empty(&blocked_ioctls)) {
+               INSTR(BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_ioctl, 1, 0));
+               INSTR(BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW));
+
+               list_for_each(loop_ctr, &blocked_ioctls) {
+                       blocked = list_entry(loop_ctr, struct blocked_number, head);
+
+                       INSTR(BPF_STMT(BPF_LD | BPF_W | BPF_ABS, syscall_arg_lower32(1)));
+                       INSTR(BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, (uint64_t) blocked->number, 0, 3));
+                       INSTR(BPF_STMT(BPF_LD | BPF_W | BPF_ABS, syscall_arg_upper32(1)));
+                       INSTR(BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, (uint64_t) blocked->number >> 32, 0, 1));
+                       INSTR(BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ERRNO | ENOTTY));
+               }
        }
 
        INSTR(BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW));