diff options
author | Alice Frosi <afrosi@redhat.com> | 2023-02-27 10:55:31 +0100 |
---|---|---|
committer | Alice Frosi <afrosi@redhat.com> | 2023-02-27 11:59:32 +0100 |
commit | f219fada2e1107ce1a0f69bab03ee93d92d7b6f3 (patch) | |
tree | 9e4ec8178c0c3b27431518a27932f773acb644bf /operations.c | |
parent | 4989288ddfe8156fc4cea5599c34ef932010c9aa (diff) | |
download | seitan-f219fada2e1107ce1a0f69bab03ee93d92d7b6f3.tar seitan-f219fada2e1107ce1a0f69bab03ee93d92d7b6f3.tar.gz seitan-f219fada2e1107ce1a0f69bab03ee93d92d7b6f3.tar.bz2 seitan-f219fada2e1107ce1a0f69bab03ee93d92d7b6f3.tar.lz seitan-f219fada2e1107ce1a0f69bab03ee93d92d7b6f3.tar.xz seitan-f219fada2e1107ce1a0f69bab03ee93d92d7b6f3.tar.zst seitan-f219fada2e1107ce1a0f69bab03ee93d92d7b6f3.zip |
seitan: copy immediate args with op_copy
Diffstat (limited to 'operations.c')
-rw-r--r-- | operations.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/operations.c b/operations.c index cd67ccc..6b19212 100644 --- a/operations.c +++ b/operations.c @@ -169,15 +169,18 @@ int copy_args(struct seccomp_notif *req, struct op_copy_args *copy, void *data, fprintf(stderr, "the seccomp request isn't valid anymore\n"); return -1; } - for (i = 0; i < 6; i++) { - if (!copy->args[i].need_copied) - continue; - dest = (uint16_t *)data + copy->args[i].args_off; - nread = pread(fd, dest, copy->args[i].size, req->data.args[i]); - if (nread < 0) { - perror("pread"); - return -1; + if (copy->args[i].type == REFERENCE) { + dest = (uint16_t *)data + copy->args[i].args_off; + nread = pread(fd, dest, copy->args[i].size, + req->data.args[i]); + if (nread < 0) { + perror("pread"); + return -1; + } + } else { + memcpy((uint16_t *)data + copy->args[i].args_off, + &req->data.args[i], copy->args[i].size); } } close(fd); |