mirror of https://github.com/acidanthera/audk.git
MdeModulePkg NvmExpressDxe: Add check on the attributes of NVME controller
According to UEFI spec, an EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL with neither EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_LOGICAL nor EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_PHYSICAL set in the Attributes field is an illegal configuration. This commit adds this check in the PassThru API to follow the spec. Cc: Feng Tian <feng.tian@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com>
This commit is contained in:
parent
3c52deafda
commit
491f602629
|
@ -375,6 +375,7 @@ NvmExpressPassThru (
|
|||
UINT64 *Prp;
|
||||
VOID *PrpListHost;
|
||||
UINTN PrpListNo;
|
||||
UINT32 Attributes;
|
||||
UINT32 IoAlign;
|
||||
UINT32 Data;
|
||||
NVME_PASS_THRU_ASYNC_REQ *AsyncRequest;
|
||||
|
@ -395,10 +396,21 @@ NvmExpressPassThru (
|
|||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
//
|
||||
// 'Attributes' with neither EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_LOGICAL nor
|
||||
// EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_PHYSICAL set is an illegal
|
||||
// configuration.
|
||||
//
|
||||
Attributes = This->Mode->Attributes;
|
||||
if ((Attributes & (EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_PHYSICAL |
|
||||
EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_LOGICAL)) == 0) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
//
|
||||
// Buffer alignment check for TransferBuffer & MetadataBuffer.
|
||||
//
|
||||
IoAlign = This->Mode->IoAlign;
|
||||
IoAlign = This->Mode->IoAlign;
|
||||
if (IoAlign > 0 && (((UINTN) Packet->TransferBuffer & (IoAlign - 1)) != 0)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue