diff options
author | Alex Bennée <alex.bennee@linaro.org> | 2022-04-01 18:40:23 +0100 |
---|---|---|
committer | Alex Bennée <alex.bennee@linaro.org> | 2022-04-01 18:40:23 +0100 |
commit | d6b4852f8df4adc60e2008ea1232a850f81c7c40 (patch) | |
tree | 429bf324b4ccd1d6d90935dd18439b51b9cd2e6a | |
parent | aa6cf2315825249b27e7b4d6484038757719ae8e (diff) |
final fixestesting/vrpmb-refactor-010422
-rw-r--r-- | tools/rpmb/rpmb.c | 15 | ||||
-rwxr-xr-x | tools/rpmb/test.sh | 2 |
2 files changed, 13 insertions, 4 deletions
diff --git a/tools/rpmb/rpmb.c b/tools/rpmb/rpmb.c index 284ac4330fbe..7bcc0b8820f0 100644 --- a/tools/rpmb/rpmb.c +++ b/tools/rpmb/rpmb.c @@ -580,10 +580,13 @@ static int vrpmb_write_blocks(int dev_fd, void *key, void *data, int addr, int l static int vrpmb_read_blocks(int dev_fd, void *key, int addr, int count, void *data, int len) { struct rpmb_ioc_rblocks_cmd cmd; - int frame_length = (len / RPMB_BLOCK_SIZE) * sizeof(struct virtio_rpmb_frame); + int frame_length = count * sizeof(struct virtio_rpmb_frame); struct virtio_rpmb_frame *frames = malloc(frame_length); int i, ret = -1; + rpmb_dbg("%s: reading %d blocks into %d bytes (%d bytes of frames)\n", + __func__, count, len, frame_length); + if (!frames) { rpmb_err("unable to allocate memory for frames"); return -1; @@ -604,6 +607,8 @@ static int vrpmb_read_blocks(int dev_fd, void *key, int addr, int count, void *d for (i = 0; i < count; i++) { struct virtio_rpmb_frame *f = &frames[i]; + vrpmb_dump_frame("block data", f); + if (key) { ret = vrpmb_check_mac(key, f, 1); if (ret) { @@ -738,7 +743,7 @@ static int op_rpmb_read_blocks(int nargs, char **argv) void *key = NULL; ret = -EINVAL; - if (nargs != 4) + if (nargs < 4 || nargs > 5) return ret; fd = open_dev_file(argv[0], &cap); @@ -776,7 +781,7 @@ static int op_rpmb_read_blocks(int nargs, char **argv) goto out; argv++; - if (nargs == 5) { + if (argv[0]) { key = read_key(argv[0]); if (!key) { rpmb_err("failed to read key data"); @@ -786,7 +791,7 @@ static int op_rpmb_read_blocks(int nargs, char **argv) while (blocks_cnt > 0) { int to_copy = min(blocks_cnt, cap.rd_cnt_max); - int length = to_copy * 256; + int length = to_copy * RPMB_BLOCK_SIZE; void *data = malloc(length); if (!data) { ret = ENOMEM; @@ -799,6 +804,8 @@ static int op_rpmb_read_blocks(int nargs, char **argv) if (ret < 0) { perror("writing data"); goto out; + } else { + rpmb_dbg("wrote %d bytes/%d blocks to file\n", length, to_copy); } free(data); diff --git a/tools/rpmb/test.sh b/tools/rpmb/test.sh index c1cd5de8fda0..0a09819029d1 100755 --- a/tools/rpmb/test.sh +++ b/tools/rpmb/test.sh @@ -10,8 +10,10 @@ dd if=/dev/urandom of=data.in count=4 bs=256 echo "write data" ./rpmb -v write-blocks /dev/rpmb0 0 4 data.in key echo "read data back" +rm -f data.out ./rpmb -v read-blocks /dev/rpmb0 0 4 data.out cmp data.in data.out echo "read data back with key check" +truncate -s 0 data.out ./rpmb -v read-blocks /dev/rpmb0 0 4 data.out key cmp data.in data.out |