diff options
author | Dorjoy Chowdhury <dorjoychy111@gmail.com> | 2024-11-09 18:32:08 +0600 |
---|---|---|
committer | Philippe Mathieu-Daudé <philmd@linaro.org> | 2024-12-13 15:27:03 +0100 |
commit | d4ee9a113e36e90f76cfec892cb9aacd3cd11c17 (patch) | |
tree | 531f2120bf18a8a167ffa328121f87819a846773 | |
parent | 5b86ddd83d81add60a177804a0e5f2c373f61f82 (diff) | |
download | qemu-d4ee9a113e36e90f76cfec892cb9aacd3cd11c17.zip qemu-d4ee9a113e36e90f76cfec892cb9aacd3cd11c17.tar.gz qemu-d4ee9a113e36e90f76cfec892cb9aacd3cd11c17.tar.bz2 |
hw/virtio/virtio-nsm: Support string data for extendPCR
NSM device in AWS Nitro Enclaves supports extending with both
bytestring and string data.
Signed-off-by: Dorjoy Chowdhury <dorjoychy111@gmail.com>
Reviewed-by: Alexander Graf <graf@amazon.com>
Message-ID: <20241109123208.24281-1-dorjoychy111@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
-rw-r--r-- | hw/virtio/virtio-nsm.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/hw/virtio/virtio-nsm.c b/hw/virtio/virtio-nsm.c index a3db8ee..6830fcf 100644 --- a/hw/virtio/virtio-nsm.c +++ b/hw/virtio/virtio-nsm.c @@ -444,7 +444,7 @@ static bool handle_describe_pcr(VirtIONSM *vnsm, struct iovec *request, * key = String("index"), * value = Uint8(pcr), * key = String("data"), - * value = Byte_String(data), + * value = Byte_String(data) || String(data), * } * } * } @@ -504,14 +504,21 @@ static enum NSMResponseTypes get_nsm_extend_pcr_req(uint8_t *req, size_t len, if (cbor_string_length(pair[i].key) == 4 && memcmp(str, "data", 4) == 0) { - if (!cbor_isa_bytestring(pair[i].value)) { + if (cbor_isa_bytestring(pair[i].value)) { + str = cbor_bytestring_handle(pair[i].value); + if (!str) { + goto cleanup; + } + nsm_req->data_len = cbor_bytestring_length(pair[i].value); + } else if (cbor_isa_string(pair[i].value)) { + str = cbor_string_handle(pair[i].value); + if (!str) { + goto cleanup; + } + nsm_req->data_len = cbor_string_length(pair[i].value); + } else { goto cleanup; } - str = cbor_bytestring_handle(pair[i].value); - if (!str) { - goto cleanup; - } - nsm_req->data_len = cbor_bytestring_length(pair[i].value); /* * nsm_req->data_len will be smaller than NSM_REQUEST_MAX_SIZE as * we already check for the max request size before processing |