mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/AbsPointer: Don't access key codes when length is wrong
Per USB HID spec, the buffer holding key codes should at least 3-byte long. Today's code assumes that the key codes buffer length is longer than 3-byte 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 3-byte. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Steven Shi <steven.shi@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
parent
8bcbe587e7
commit
0dd6065520
|
@ -813,8 +813,6 @@ OnMouseInterruptComplete (
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
UsbMouseAbsolutePointerDevice->StateChanged = TRUE;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check mouse Data
|
// Check mouse Data
|
||||||
// USB HID Specification specifies following data format:
|
// USB HID Specification specifies following data format:
|
||||||
|
@ -827,6 +825,12 @@ OnMouseInterruptComplete (
|
||||||
// 2 0 to 7 Y displacement
|
// 2 0 to 7 Y displacement
|
||||||
// 3 to n 0 to 7 Device specific (optional)
|
// 3 to n 0 to 7 Device specific (optional)
|
||||||
//
|
//
|
||||||
|
if (DataLength < 3) {
|
||||||
|
return EFI_DEVICE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
UsbMouseAbsolutePointerDevice->StateChanged = TRUE;
|
||||||
|
|
||||||
UsbMouseAbsolutePointerDevice->State.ActiveButtons = *(UINT8 *) Data & (BIT0 | BIT1 | BIT2);
|
UsbMouseAbsolutePointerDevice->State.ActiveButtons = *(UINT8 *) Data & (BIT0 | BIT1 | BIT2);
|
||||||
|
|
||||||
UsbMouseAbsolutePointerDevice->State.CurrentX =
|
UsbMouseAbsolutePointerDevice->State.CurrentX =
|
||||||
|
|
Loading…
Reference in New Issue