diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2023-06-07 23:02:23 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2023-06-07 23:06:32 +0200 |
commit | c38fccbc867019d6c063be1c1d8137edfe52f8de (patch) | |
tree | b3c1b398b4eb40e862263ee084b1dbb7463c1ada /operations.c | |
parent | 1c1a9da7a4f9c4c1990192e14763ebf423d812a9 (diff) | |
download | seitan-c38fccbc867019d6c063be1c1d8137edfe52f8de.tar seitan-c38fccbc867019d6c063be1c1d8137edfe52f8de.tar.gz seitan-c38fccbc867019d6c063be1c1d8137edfe52f8de.tar.bz2 seitan-c38fccbc867019d6c063be1c1d8137edfe52f8de.tar.lz seitan-c38fccbc867019d6c063be1c1d8137edfe52f8de.tar.xz seitan-c38fccbc867019d6c063be1c1d8137edfe52f8de.tar.zst seitan-c38fccbc867019d6c063be1c1d8137edfe52f8de.zip |
mknod/mknodat values, initial support for MASK flag, OP_BITWISE
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'operations.c')
-rw-r--r-- | operations.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/operations.c b/operations.c index eefc746..120b142 100644 --- a/operations.c +++ b/operations.c @@ -322,11 +322,11 @@ int op_fd(const struct seccomp_notif *req, int notifier, return 0; } -int op_mask(const struct seccomp_notif *req, int notifier, struct gluten *g, - struct op_mask *op) +int op_bitwise(const struct seccomp_notif *req, int notifier, struct gluten *g, + struct op_bitwise *op) { - const struct mask_desc *desc = gluten_ptr(&req->data, g, op->desc); - const unsigned char *src, *mask; + const struct bitwise_desc *desc = gluten_ptr(&req->data, g, op->desc); + const unsigned char *x, *y; unsigned char *dst; unsigned i; @@ -335,9 +335,9 @@ int op_mask(const struct seccomp_notif *req, int notifier, struct gluten *g, if (!desc) return -1; - dst = gluten_write_ptr( g, desc->dst); - src = gluten_ptr(&req->data, g, desc->src); - mask = gluten_ptr(&req->data, g, desc->mask); + dst = gluten_write_ptr( g, desc->dst); + x = gluten_ptr(&req->data, g, desc->x); + y = gluten_ptr(&req->data, g, desc->y); /* if (!dst || !src || !mask || @@ -346,14 +346,21 @@ int op_mask(const struct seccomp_notif *req, int notifier, struct gluten *g, !check_gluten_limits(desc->mask, desc->size)) return -1; */ - debug(" op_mask: dst=(%s %d) src=(%s %d) mask=(%s %d) size=%d", - gluten_offset_name[desc->dst.type], desc->dst.offset, - gluten_offset_name[desc->src.type], desc->src.offset, - gluten_offset_name[desc->mask.type], desc->mask.offset, + debug(" op_bitwise: dst=(%s %d) := x=(%s %d) %s y=(%s %d) size=%d", + gluten_offset_name[desc->dst.type], desc->dst.offset, + gluten_offset_name[desc->x.type], desc->x.offset, + bitwise_type_str[desc->type], + gluten_offset_name[desc->y.type], desc->y.offset, desc->size); - for (i = 0; i < desc->size; i++) - dst[i] = src[i] & mask[i]; + for (i = 0; i < desc->size; i++) { + if (desc->type == BITWISE_AND) + dst[i] = x[i] & y[i]; + else if (desc->type == BITWISE_OR) + dst[i] = x[i] | y[i]; + else + return -1; + } return 0; } @@ -465,7 +472,7 @@ int eval(struct gluten *g, const struct seccomp_notif *req, HANDLE_OP(OP_RETURN, op_return, ret, g); HANDLE_OP(OP_FD, op_fd, fd, g); HANDLE_OP(OP_LOAD, op_load, load, g); - HANDLE_OP(OP_MASK, op_mask, mask, g); + HANDLE_OP(OP_BITWISE, op_bitwise, bitwise, g); HANDLE_OP(OP_CMP, op_cmp, cmp, g); HANDLE_OP(OP_RESOLVEDFD, op_resolve_fd, resfd, g); HANDLE_OP(OP_NR, op_nr, nr, g); |