summaryrefslogtreecommitdiffstats
path: root/ArmPkg/Library
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2016-04-19 16:12:10 +0200
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2016-05-10 14:38:59 +0200
commite55f8c73b6255b353c021ab59017a364dd527a86 (patch)
treecc5fbb2bb5c2783070f0799e5950fa1c7392ec63 /ArmPkg/Library
parent9c0dc0b01a79666c3ba8aa0c69ad92131aada113 (diff)
downloadedk2-e55f8c73b6255b353c021ab59017a364dd527a86.tar.gz
edk2-e55f8c73b6255b353c021ab59017a364dd527a86.tar.bz2
edk2-e55f8c73b6255b353c021ab59017a364dd527a86.zip
ArmPkg/ArmDmaLib: deal with NULL return value of UncachedAllocatePages ()
The allocation function UncachedAllocatePages () may return NULL, in which case our implementation of DmaAllocateBuffer () should return EFI_OUT_OF_RESOURCES rather than silently ignoring the NULL value and returning EFI_SUCCESS. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Diffstat (limited to 'ArmPkg/Library')
-rw-r--r--ArmPkg/Library/ArmDmaLib/ArmDmaLib.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c b/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c
index 54a49a18d3..1e6b288b10 100644
--- a/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c
+++ b/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c
@@ -216,6 +216,8 @@ DmaAllocateBuffer (
OUT VOID **HostAddress
)
{
+ VOID *Allocation;
+
if (HostAddress == NULL) {
return EFI_INVALID_PARAMETER;
}
@@ -226,13 +228,19 @@ DmaAllocateBuffer (
// We used uncached memory to keep coherency
//
if (MemoryType == EfiBootServicesData) {
- *HostAddress = UncachedAllocatePages (Pages);
+ Allocation = UncachedAllocatePages (Pages);
} else if (MemoryType == EfiRuntimeServicesData) {
- *HostAddress = UncachedAllocateRuntimePages (Pages);
+ Allocation = UncachedAllocateRuntimePages (Pages);
} else {
return EFI_INVALID_PARAMETER;
}
+ if (Allocation == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ *HostAddress = Allocation;
+
return EFI_SUCCESS;
}