diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/gluten.h | 42 | ||||
-rw-r--r-- | common/util.c | 10 |
2 files changed, 40 insertions, 12 deletions
diff --git a/common/gluten.h b/common/gluten.h index 1414d9e..4e1c249 100644 --- a/common/gluten.h +++ b/common/gluten.h @@ -21,10 +21,10 @@ extern struct seccomp_data anonymous_seccomp_data; -#define HEADER_SIZE 65536 -#define INST_SIZE 65536 -#define RO_DATA_SIZE 65536 -#define DATA_SIZE 65536 +#define HEADER_SIZE (1 << 20) +#define INST_SIZE (1 << 20) +#define RO_DATA_SIZE (1 << 20) +#define DATA_SIZE (1 << 20) #define INST_MAX 256 #define OFFSET_MAX \ @@ -67,13 +67,14 @@ enum op_type { OP_CALL, OP_COPY, OP_FD, + OP_FDGET, OP_RETURN, OP_LOAD, OP_STORE, OP_IOVLOAD, OP_BITWISE, OP_CMP, - OP_RESOLVEDFD, + OP_RESOLVEFD, }; /** @@ -199,6 +200,11 @@ struct op_fd { struct gluten_offset desc; /* struct fd_desc */ }; +struct op_fdget { + struct gluten_offset src; + struct gluten_offset dst; +}; + struct op_load { struct gluten_offset src; struct gluten_offset dst; @@ -216,6 +222,12 @@ struct op_iovload { struct gluten_offset iovlen; struct gluten_offset dst; size_t size; + size_t zero_fill; +}; + +struct vec_desc { + struct gluten_offset start; + off_t len_offset; }; enum op_cmp_type { @@ -232,6 +244,7 @@ extern const char *cmp_type_str[CMP_MAX + 1]; struct cmp_desc { enum op_cmp_type cmp; size_t size; + struct vec_desc vec; struct gluten_offset x; struct gluten_offset y; struct gluten_offset jmp; @@ -252,6 +265,7 @@ extern const char *bitwise_type_str[BITWISE_MAX + 1]; struct bitwise_desc { size_t size; enum bitwise_type type; + struct vec_desc vec; struct gluten_offset dst; struct gluten_offset x; struct gluten_offset y; @@ -261,14 +275,23 @@ struct op_bitwise { struct gluten_offset desc; /* struct bitwise_desc */ }; +enum resolvefd_type { + RESOLVEFD_PATH, + RESOLVEFD_MOUNT, + RESOLVEFD_MAX = RESOLVEFD_MOUNT, +}; + +extern const char *resolvefd_type_str[RESOLVEFD_MAX + 1]; + struct resolvefd_desc { - struct gluten_offset fd; - struct gluten_offset path; - size_t path_max; + struct gluten_offset fd; + struct gluten_offset path; + enum resolvefd_type type; + size_t path_max; }; struct op_resolvefd { - struct gluten_offset desc; + struct gluten_offset desc; /* struct resolvefd_desc */ }; struct op_copy { @@ -284,6 +307,7 @@ struct op { struct op_call call; struct op_return ret; struct op_fd fd; + struct op_fdget fdget; struct op_load load; struct op_store store; struct op_iovload iovload; diff --git a/common/util.c b/common/util.c index 94aeea3..f0a1df4 100644 --- a/common/util.c +++ b/common/util.c @@ -54,11 +54,13 @@ const char *context_spec_type_name[CONTEXT_SPEC_TYPE_MAX + 1] = { const char *bitwise_type_str[BITWISE_MAX + 1] = { "&", "|" }; const char *cmp_type_str[CMP_MAX + 1] = { - "EQ", "NE", "GT", "GE", "LT", "LE", + "EQ", "NE", "GT", "GE", "LT", "LE", }; const char *metadata_type_str[METADATA_MAX + 1] = { "uid", "gid", "pid" }; +const char *resolvefd_type_str[RESOLVEFD_MAX + 1] = { "path", "mount" }; + const char *syscall_name(long nr) { struct call **set, *call; @@ -66,14 +68,16 @@ const char *syscall_name(long nr) { if (!call->name) { set++; call = set[0]; - continue; + + if (!*set) + return "unknown"; } if (nr == call->number) break; } - return call ? call->name : "unknown"; + return call->name; } const char *syscall_name_str[N_SYSCALL + 1] = { |