summaryrefslogtreecommitdiffstats
path: root/ShellPkg
diff options
context:
space:
mode:
authorMichael D Kinney <michael.d.kinney@intel.com>2022-12-09 07:53:21 -0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2022-12-13 21:12:47 +0000
commit592bf33a29360e8a447ed8b75daefe94c0888642 (patch)
treef50e9cba983a31355f6351e35cc6b4d35ff5b070 /ShellPkg
parent1fd8d08970a9ee7d350c7dd42bffb0cb96426041 (diff)
downloadedk2-592bf33a29360e8a447ed8b75daefe94c0888642.tar.gz
edk2-592bf33a29360e8a447ed8b75daefe94c0888642.tar.bz2
edk2-592bf33a29360e8a447ed8b75daefe94c0888642.zip
ShellPkg/Shell: Do not set end device path if already end
Update Shell Protocol EfiShellGetMapFromDevicePath() to not set the end if the device path if it is already an end of entire device path. This removes a write operation that can cause failures if the Device Path Protocol is mapped to read-only memory. In general Device Path Protocols should not be modified unless the API explicitly states that the device path is modified. Cc: Ard Biesheuvel <ardb@kernel.org> Cc: Ray Ni <ray.ni@intel.com> Cc: Zhichao Gao <zhichao.gao@intel.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
Diffstat (limited to 'ShellPkg')
-rw-r--r--ShellPkg/Application/Shell/ShellProtocol.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/ShellPkg/Application/Shell/ShellProtocol.c b/ShellPkg/Application/Shell/ShellProtocol.c
index 509eb60e40..e6d20ab164 100644
--- a/ShellPkg/Application/Shell/ShellProtocol.c
+++ b/ShellPkg/Application/Shell/ShellProtocol.c
@@ -294,7 +294,13 @@ EfiShellGetMapFromDevicePath (
*DevicePath = NextDevicePathNode (*DevicePath);
}
- SetDevicePathEndNode (*DevicePath);
+ //
+ // Do not call SetDevicePathEndNode() if the device path node is already the
+ // end of an entire device path.
+ //
+ if (!IsDevicePathEnd (*DevicePath)) {
+ SetDevicePathEndNode (*DevicePath);
+ }
}
/*