aboutgitcodelistschat:MatrixIRC
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/gluten.h42
-rw-r--r--common/util.c10
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] = {