Acidanthera UEFI Development Kit based on EDK II edk2-stable202311
Go to file
Laszlo Ersek ce1647fc60 MdeModulePkg: ScsiDiskDxe: cope with broken "Supported VPD Pages" VPD page
The USB flash drive with Vendor ID 0x1516 (CompUSA) and Product ID 0x6221
returns a broken "Supported VPD Pages" VPD page. In particular, the
PageLength field has the invalid value 0x0602 (decimal 1538).

This prevents the loop from terminating that scans for the Block Limits
VPD page code in ScsiDiskInquiryDevice():

        for (Index = 0; Index < PageLength; Index++) {

because the Index variable has type UINT8, and it wraps from 255 to 0,
without ever reaching PageLength (1538), and because
EFI_SCSI_PAGE_CODE_BLOCK_LIMITS_VPD does not occur at offsets 0 through
255.

* The fix is not to change the type of Index to UINT16 or a wider type.
  Namely, section

    7.8.14 Supported VPD Pages VPD page

  in the "SCSI Primary Commands - 4" (SPC-4) specification names the
  following requirement:

    The supported VPD page list shall contain a list of all VPD page codes
    (see 7.8) implemented by the logical unit in ascending order beginning
    with page code 00h.

  Since page codes are 8-bit unsigned quantities, it follows that the
  maximum size for the Supported VPD Pages VPD page is 0x100 bytes, in
  which every possible page code (0x00 through 0xFF) will be found, before
  the UINT8 offset wraps around.

  (EFI_SCSI_SUPPORTED_VPD_PAGES_VPD_PAGE.SupportedVpdPageList is correctly
  sized as well, in "MdePkg/Include/IndustryStandard/Scsi.h".)

* Instead, add sanity checks that enforce the above requirement. If the
  device breaks the spec, simply fall back to the "Block Limits page
  absent" case.

Cc: Feng Tian <feng.tian@intel.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Ref: https://bugzilla.redhat.com/show_bug.cgi?id=1330955
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
2016-05-05 09:24:53 +02:00
AppPkg AppPkg/.../Python: Clean up and document how to escape the -# option. 2016-01-06 01:00:19 +00:00
ArmPkg ArmPkg: implement CpuIo2 protocol driver specific for PCI 2016-04-29 18:04:25 +02:00
ArmPlatformPkg ArmPlatformPkg/PrePi: allow unicore version to be used on MP hardware 2016-04-29 18:12:52 +02:00
ArmVirtPkg ArmVirtPkg/VirtFdtDxe: remove Xenio handling and rename to VirtioFdtDxe 2016-04-13 17:26:07 +02:00
BaseTools BaseTools/Build: Better DSC arch filtering 2016-04-29 14:53:27 +08:00
BeagleBoardPkg BeagleBoardPkg: Convert to build FatPkg from source 2016-04-07 20:45:39 +02:00
Conf EDK II: Add .gitignore 2014-10-14 16:08:15 +00:00
CorebootModulePkg CorebootModulePkg: Remove DuetPkg references 2016-05-02 15:46:44 -07:00
CorebootPayloadPkg CorebootModulePkg: Remove DuetPkg references 2016-05-02 15:46:44 -07:00
CryptoPkg CryptoPkg: Fix the potential system hang issue 2016-03-15 09:04:20 +08:00
DuetPkg DuetPkg: Convert to build FatPkg from source 2016-04-08 13:47:31 +02:00
EdkCompatibilityPkg EdkCompatibilityPkg: Fix a typo. 2016-04-15 13:33:43 +08:00
EdkShellBinPkg */Contributions.txt: Update example email address 2015-02-03 17:29:14 +00:00
EdkShellPkg */Contributions.txt: Update example email address 2015-02-03 17:29:14 +00:00
EmbeddedPkg EmbeddedPkg/AcpiLib: add GICD table init macro for ACPI 6.0 2016-04-14 12:56:34 +02:00
EmulatorPkg EmulatorPkg: Convert to always build FatPkg 2016-04-07 20:45:45 +02:00
FatBinPkg FatBinPkg: Change to 2-clause BSD license 2016-04-22 00:55:21 -07:00
FatPkg FatPkg: Add Contributions.txt 2016-04-22 00:55:21 -07:00
IntelFrameworkModulePkg IntelFrameworkModulePkg: Remove unused PCD/Protocol 2016-04-13 14:54:49 +08:00
IntelFrameworkPkg IntelFrameworkPkg/FrameworkUefiLib: implement EfiEventGroupSignal 2016-03-23 12:05:45 +01:00
IntelFspPkg IntelFspPkg: Add NOOPT target in IntelFspPkg.dsc 2016-01-21 02:14:43 +00:00
IntelFspWrapperPkg IntelFspWrapperPkg: PeiFspHobProcessLibSample: remove set but unused variables 2016-03-25 10:52:21 +01:00
MdeModulePkg MdeModulePkg: ScsiDiskDxe: cope with broken "Supported VPD Pages" VPD page 2016-05-05 09:24:53 +02:00
MdePkg MdePkg: Add TCG_BLOCK_SID_FEATURE_DESCRIPTOR definition. 2016-05-05 12:52:45 +08:00
NetworkPkg NetworkPkg: Do not use hard coded TTL/ToS in PXE driver. 2016-05-05 09:08:24 +08:00
Nt32Pkg Nt32Pkg: Fix SnpNt32 GetStatus bug 2016-05-05 08:52:06 +08:00
Omap35xxPkg Omap35xxPkg: drop CpuExceptionHandlerLib library class resolution 2016-03-17 09:15:11 +01:00
OptionRomPkg OptionRomPkg: Ax88772b: Fixing register access issue in Apple Eth Adapter 2016-03-31 08:53:51 +08:00
OvmfPkg OvmfPkg/OvmfPkgIa32X64.dsc: Move PcdShellFile to [PcdsFixedAtBuild.X64] 2016-05-04 08:47:46 +08:00
PcAtChipsetPkg PcAtChipsetPkg/PciHostBridge: Remove PciHostBridge driver 2016-03-29 11:22:07 +08:00
PerformancePkg PerformancePkg Dp_App: Delete InitCumulativeData() 2016-05-03 12:42:44 +08:00
QuarkPlatformPkg QuarkPlatformPkg/Readme.md: Move images to tianocore wiki 2016-01-31 19:22:57 +00:00
QuarkSocPkg QuarkSocPkg: Add /Oi option to let MemoryInit pass build. 2016-04-13 09:28:25 +08:00
SecurityPkg SecurityPkg OpalPasswordSmm: Always execute BlockSid command. 2016-05-05 12:52:48 +08:00
ShellBinPkg ShellBinPkg: Arm/AArch64 Shell binary update. 2016-02-09 16:34:14 +00:00
ShellPkg ShellPkg UefiDpLib: Delete one comment introduced by 196ccda08f 2016-05-03 12:42:45 +08:00
SourceLevelDebugPkg SourceLevelDebugPkg/SmmDebugAgent: mMailboxPointer is used before set 2016-04-06 09:13:18 +08:00
StdLib StdLib/BsdSocketLib: Fix minor memory leak by freeing rrecp on error return. 2016-02-17 16:11:29 -08:00
StdLibPrivateInternalFiles StdLib: Clarify and improve comments. 2016-01-06 00:31:42 +00:00
UefiCpuPkg UefiCpuPkg/MtrrLib: Remove the loop of calculating Fixed-MTRR Mask 2016-04-29 10:07:07 +08:00
UnixPkg UnixPkg: Remove UnixPkg files (It is replaced by EmulatorPkg) 2013-07-29 21:09:55 +00:00
Vlv2DeviceRefCodePkg Vlv2TbltDevicePkg/Vlv2DeviceRefCodePkg: 2015-11-10 07:47:29 +00:00
Vlv2TbltDevicePkg Vlv2TbltDevicePkg: Convert to build FatPkg from source 2016-04-22 00:55:21 -07:00
.gitignore EDK II: Add .gitignore 2014-10-14 16:08:15 +00:00
BuildNotes2.txt BaseTools: Updated BuildNotes URLs 2016-03-25 09:46:44 +08:00
Edk2Setup.bat BaseTools: Update Edk2Setup.bat to support multiple workspaces 2015-10-08 09:29:36 +00:00
Maintainers.txt Maintainers.txt: Update maintainers for ShellBinPkg 2016-02-10 14:45:52 +00:00
edksetup.bat Update edksetup.bat to check EDK_TOOLS_PATH before set it. 2016-04-11 16:20:28 +08:00
edksetup.sh BaseTools: Update edksetup.sh to support multiple workspaces 2015-10-08 09:29:56 +00:00