aboutgitcodelistschat:MatrixIRC
diff options
context:
space:
mode:
-rw-r--r--gluten.h9
-rw-r--r--operations.c6
2 files changed, 15 insertions, 0 deletions
diff --git a/gluten.h b/gluten.h
index 69a6b6b..570d82a 100644
--- a/gluten.h
+++ b/gluten.h
@@ -52,6 +52,7 @@ enum op_type {
OP_RETURN,
OP_COPY_ARGS,
OP_END,
+ OP_CMP,
};
enum value_type {
@@ -106,6 +107,13 @@ struct op_copy_args {
struct copy_arg args[6];
};
+struct op_cmp {
+ uint16_t s1_off;
+ uint16_t s2_off;
+ size_t size;
+ unsigned int jmp;
+};
+
struct op {
enum op_type type;
union {
@@ -115,6 +123,7 @@ struct op {
struct op_return ret;
struct op_inject inj;
struct op_copy_args copy;
+ struct op_cmp cmp;
};
};
#endif /* GLUTEN_H */
diff --git a/operations.c b/operations.c
index 8cd0828..afc4b00 100644
--- a/operations.c
+++ b/operations.c
@@ -313,6 +313,12 @@ int do_operations(void *data, struct op operations[], struct seccomp_notif *req,
break;
case OP_END:
return 0;
+ case OP_CMP:
+ if (memcmp((uint16_t *)data + operations[i].cmp.s1_off,
+ (uint16_t *)data + operations[i].cmp.s2_off,
+ operations[i].cmp.size) != 0) {
+ i = operations[i].cmp.jmp;
+ }
break;
default:
fprintf(stderr, "unknow operation %d \n",