From 8bcbe587e794aaaa6506b647732316ce5ba40168 Mon Sep 17 00:00:00 2001 From: Ruiyu Ni Date: Thu, 13 Sep 2018 15:49:23 +0800 Subject: MdeModulePkg/UsbKb: Don't access key codes when length is wrong Per USB HID spec, the buffer holding key codes should be 8-byte long. Today's code assumes that the key codes buffer length is 8-byte long and unconditionally accesses the key codes buffer. It's incorrect. The patch fixes the issue by returning Device Error when the length is less than 8-byte. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni Cc: Star Zeng Cc: Jiewen Yao Cc: Steven Shi Reviewed-by: Star Zeng --- MdeModulePkg/Bus/Usb/UsbKbDxe/KeyBoard.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MdeModulePkg/Bus/Usb/UsbKbDxe/KeyBoard.c b/MdeModulePkg/Bus/Usb/UsbKbDxe/KeyBoard.c index 9cb4b5d..7505951 100644 --- a/MdeModulePkg/Bus/Usb/UsbKbDxe/KeyBoard.c +++ b/MdeModulePkg/Bus/Usb/UsbKbDxe/KeyBoard.c @@ -1059,6 +1059,10 @@ KeyboardHandler ( // Byte 1 is reserved. // Bytes 2 to 7 are keycodes. // + if (DataLength < 8) { + return EFI_DEVICE_ERROR; + } + CurKeyCodeBuffer = (UINT8 *) Data; OldKeyCodeBuffer = UsbKeyboardDevice->LastKeyCodeArray; -- cgit v1.1