[PATCH 09/27] hw/usb/dev-smartcard-reader: validate migrated fields in post_load
Marc-André Lureau <[email protected]> Wed, 05 Aug 2026 15:50:59 +0400
| Newsgroups | gmane.comp.emulators.qemu |
|---|---|
| Message-ID | <[email protected]> |
Validate fields loaded from the migration stream to reject crafted or corrupt data before it can cause harm. Signed-off-by: Marc-André Lureau <[email protected]> --- hw/usb/dev-smartcard-reader.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c index c6a9faf00d6f..bed641be4512 100644 --- a/hw/usb/dev-smartcard-reader.c +++ b/hw/usb/dev-smartcard-reader.c @@ -1364,6 +1364,26 @@ static void ccid_realize(USBDevice *dev, Error **errp) static int ccid_post_load(void *opaque, int version_id) { USBCCIDState *s = opaque; + int i; + + if (s->bulk_in_pending_end - s->bulk_in_pending_start > BULK_IN_PENDING_NUM) { + return -EINVAL; + } + + if (s->pending_answers_num > PENDING_ANSWERS_NUM) { + return -EINVAL; + } + + if (s->bulk_out_pos > BULK_OUT_DATA_SIZE) { + return -EINVAL; + } + + for (i = 0; i < BULK_IN_PENDING_NUM; i++) { + if (s->bulk_in_pending[i].len > BULK_IN_BUF_SIZE || + s->bulk_in_pending[i].pos > s->bulk_in_pending[i].len) { + return -EINVAL; + } + } /* * This must be done after usb_device_attach, which sets state to ATTACHED, -- 2.55.0