aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDorjoy Chowdhury <dorjoychy111@gmail.com>2024-11-09 18:32:08 +0600
committerPhilippe Mathieu-Daudé <philmd@linaro.org>2024-12-13 15:27:03 +0100
commitd4ee9a113e36e90f76cfec892cb9aacd3cd11c17 (patch)
tree531f2120bf18a8a167ffa328121f87819a846773
parent5b86ddd83d81add60a177804a0e5f2c373f61f82 (diff)
downloadqemu-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.c21
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