From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: edk2-devel@lists.01.org
Cc: leif.lindholm@linaro.org, thomas.abraham@arm.com,
nariman.poushin@linaro.org, lersek@redhat.com, philmd@redhat.com,
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [PATCH v2 edk2-platforms 3/3] Platform/ARM/BdsLib: maintain alignment for DevicePaths
Date: Fri, 23 Nov 2018 09:44:06 +0100 [thread overview]
Message-ID: <20181123084406.27192-4-ard.biesheuvel@linaro.org> (raw)
In-Reply-To: <20181123084406.27192-1-ard.biesheuvel@linaro.org>
DevicePath node types may have any size, and so it is up to the
code that manipulates them to ensure that dereferencing them only
occurs when the pointer is aligned explicitly.
Since BdsConnectAndUpdateDevicePath() has only two callers, one of
which itself, we can simply duplicate the device path (similar to
how DxeCore's CoreConnectController () does it), and free the pool
allocation again on the way out. (Note that the allocation only
occurs when the non-recursive path is taken and the function
returns EFI_SUCCESS)
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
Platform/ARM/Library/BdsLib/BdsFilePath.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/Platform/ARM/Library/BdsLib/BdsFilePath.c b/Platform/ARM/Library/BdsLib/BdsFilePath.c
index 62f796e5526d..ad66b2f82718 100644
--- a/Platform/ARM/Library/BdsLib/BdsFilePath.c
+++ b/Platform/ARM/Library/BdsLib/BdsFilePath.c
@@ -423,8 +423,8 @@ BdsConnectAndUpdateDevicePath (
}
}
- if (RemainingDevicePath) {
- *RemainingDevicePath = Remaining;
+ if (!EFI_ERROR (Status) && RemainingDevicePath != NULL) {
+ *RemainingDevicePath = DuplicateDevicePath (Remaining);
}
return Status;
@@ -1314,14 +1314,18 @@ BdsLoadImageAndUpdateDevicePath (
}
FileLoader = FileLoaders;
+ Status = EFI_UNSUPPORTED;
while (FileLoader->Support != NULL) {
if (FileLoader->Support (*DevicePath, Handle, RemainingDevicePath)) {
- return FileLoader->LoadImage (DevicePath, Handle, RemainingDevicePath, Type, Image, FileSize);
+ Status = FileLoader->LoadImage (DevicePath, Handle, RemainingDevicePath,
+ Type, Image, FileSize);
+ break;
}
FileLoader++;
}
- return EFI_UNSUPPORTED;
+ FreePool (RemainingDevicePath);
+ return Status;
}
EFI_STATUS
--
2.17.1
next prev parent reply other threads:[~2018-11-23 8:44 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-23 8:44 [PATCH v2 edk2-platforms 0/3] Platform/ARM: fix DevicePath mishandling in BdsLib Ard Biesheuvel
2018-11-23 8:44 ` [PATCH v2 edk2-platforms 1/3] Platform/ARM: import ARM platform specific BdsLib header Ard Biesheuvel
2018-11-23 8:44 ` [PATCH v2 edk2-platforms 2/3] Platform/ARM/BdsLib: drop unused functions Ard Biesheuvel
2018-11-23 12:39 ` Laszlo Ersek
2018-11-23 8:44 ` Ard Biesheuvel [this message]
2018-11-23 12:46 ` [PATCH v2 edk2-platforms 3/3] Platform/ARM/BdsLib: maintain alignment for DevicePaths Laszlo Ersek
2018-11-23 14:15 ` [PATCH v2 edk2-platforms 0/3] Platform/ARM: fix DevicePath mishandling in BdsLib Thomas Abraham
2018-11-23 15:17 ` Ard Biesheuvel
2018-11-26 15:06 ` Leif Lindholm
2018-11-26 16:53 ` Ard Biesheuvel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181123084406.27192-4-ard.biesheuvel@linaro.org \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox