mirror of https://github.com/acidanthera/audk.git
MdeModulePkg NvmExpressDxe: Refine GetNameSpace API to follow spec
According to the UEFI spec, EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL.GetNamespace() should return EFI_NOT_FOUND when the input DevicePath is a device path node type that the NVM Express Pass Thru driver supports, but there is not a valid translation from DevicePath to a namespace ID. Current code will return EFI_SUCCESS. This commit adds additional check in the GetNameSpace API to make sure correct status is returned. 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
946f48ebe6
commit
284dc9bfe4
|
@ -820,6 +820,7 @@ NvmExpressGetNamespace (
|
|||
)
|
||||
{
|
||||
NVME_NAMESPACE_DEVICE_PATH *Node;
|
||||
NVME_CONTROLLER_PRIVATE_DATA *Private;
|
||||
|
||||
if ((This == NULL) || (DevicePath == NULL) || (NamespaceId == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
@ -829,13 +830,22 @@ NvmExpressGetNamespace (
|
|||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
Node = (NVME_NAMESPACE_DEVICE_PATH *)DevicePath;
|
||||
Node = (NVME_NAMESPACE_DEVICE_PATH *)DevicePath;
|
||||
Private = NVME_CONTROLLER_PRIVATE_DATA_FROM_PASS_THRU (This);
|
||||
|
||||
if (DevicePath->SubType == MSG_NVME_NAMESPACE_DP) {
|
||||
if (DevicePathNodeLength(DevicePath) != sizeof(NVME_NAMESPACE_DEVICE_PATH)) {
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
//
|
||||
// Check NamespaceId in the device path node is valid or not.
|
||||
//
|
||||
if ((Node->NamespaceId == 0) ||
|
||||
(Node->NamespaceId > Private->ControllerData->Nn)) {
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
*NamespaceId = Node->NamespaceId;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
|
Loading…
Reference in New Issue