From b2252bab12deeb0f5981cf390dc6499d1689b4a2 Mon Sep 17 00:00:00 2001 From: Ruiyu Ni Date: Mon, 17 Sep 2018 16:05:26 +0800 Subject: [PATCH] MdeModulePkg/UsbBus: Deny when the string descriptor length is odd Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni Cc: Jiewen Yao Cc: Star Zeng Reviewed-by: Star Zeng --- MdeModulePkg/Bus/Usb/UsbBusDxe/UsbDesc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbDesc.c b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbDesc.c index 9fc6422ab1..22b6a9d661 100644 --- a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbDesc.c +++ b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbDesc.c @@ -655,7 +655,13 @@ UsbGetOneString ( // Status = UsbCtrlGetDesc (UsbDev, USB_DESC_TYPE_STRING, Index, LangId, &Desc, 2); - if (EFI_ERROR (Status)) { + // + // Reject if Length even cannot cover itself, or odd because Unicode string byte length should be even. + // + if (EFI_ERROR (Status) || + (Desc.Length < OFFSET_OF (EFI_USB_STRING_DESCRIPTOR, Length) + sizeof (Desc.Length)) || + (Desc.Length % 2 != 0) + ) { return NULL; }