Date: Tuesday, July 9, 2013 @ 15:35:57 Author: tpowa Revision: 189850
upgpkg: refind-efi 0.7.1-1 bump to latest version Modified: refind-efi/trunk/PKGBUILD Deleted: refind-efi/trunk/UDK-MdePkg-Revert-PathNodeCount.patch refind-efi/trunk/refind_include_more_shell_paths.patch ---------------------------------------+ PKGBUILD | 147 ++++--- UDK-MdePkg-Revert-PathNodeCount.patch | 660 -------------------------------- refind_include_more_shell_paths.patch | 13 3 files changed, 85 insertions(+), 735 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2013-07-09 13:17:26 UTC (rev 189849) +++ PKGBUILD 2013-07-09 13:35:57 UTC (rev 189850) @@ -16,7 +16,7 @@ ####### pkgname="refind-efi" -pkgver="0.7.0" +pkgver="0.7.1" pkgrel="1" pkgdesc="Rod Smith's fork of rEFIt UEFI Boot Manager - built with Tianocore UDK libs" url="http://www.rodsbooks.com/refind/index.html" @@ -26,40 +26,47 @@ makedepends=('subversion' 'python2') depends=('dosfstools' 'efibootmgr') optdepends=('mactel-boot: For bless command in Apple Mac systems' - 'bash: For /usr/bin/refind-mkfont script' - 'imagemagick: For /usr/bin/refind-mkfont script') + 'bash: For refind-mkfont script' + 'imagemagick: For refind-mkfont script') options=('!strip' 'docs' '!makeflags') install="${pkgname}.install" source=("http://downloads.sourceforge.net/refind/refind-src-${pkgver}.zip" - 'UDK-MdePkg-Revert-PathNodeCount.patch' 'refind_linux.conf') for _DIR_ in BaseTools MdePkg MdeModulePkg IntelFrameworkPkg IntelFrameworkModulePkg ; do source+=("${_TIANO_DIR_}/${_DIR_}::svn+${_TIANOCORE_SVN_URL}/${_DIR_}") done +sha1sums=('5e4b15202efc658e58e68e64af8a1b2c84aab175' + '3d53eb615c3363d45feb95b9bfbf1d5491bf1c24' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP') + [[ "${CARCH}" == "x86_64" ]] && _TIANO_ARCH="X64" [[ "${CARCH}" == "i686" ]] && _TIANO_ARCH="IA32" [[ "${CARCH}" == "x86_64" ]] && _TIANO_S_ARCH="x64" [[ "${CARCH}" == "i686" ]] && _TIANO_S_ARCH="ia32" -_tianocore_udk_common() { +_setup_env_vars() { - ## Unset all FLAGS - unset CFLAGS - unset CPPFLAGS - unset CXXFLAGS - unset LDFLAGS - unset MAKEFLAGS - - ## Setup UDK Environment variables + msg "Setup UDK PATH ENV variables" export _UDK_DIR="${srcdir}/${_TIANO_DIR_}_build" export EDK_TOOLS_PATH="${_UDK_DIR}/BaseTools" +} + +_prepare_tianocore_sources() { + + _setup_env_vars + + msg "Delete old UDK BUILD dir" rm -rf "${_UDK_DIR}/" || true mkdir -p "${_UDK_DIR}/" @@ -69,103 +76,127 @@ cd "${_UDK_DIR}/" - ## Fix PcdMaximumPathNodeCount compile error - patch -Np1 -R -i "${srcdir}/UDK-MdePkg-Revert-PathNodeCount.patch" - echo - - ## Cleanup UDK config files + msg "Cleanup UDK config files" rm -rf "${_UDK_DIR}/Build/" || true rm -rf "${_UDK_DIR}/Conf/" || true mkdir -p "${_UDK_DIR}/Conf/" mkdir -p "${_UDK_DIR}/Build/" - ## UDK BaseTools requires python2 + msg "Use python2 for UDK BaseTools" sed 's|python |python2 |g' -i "${EDK_TOOLS_PATH}/BinWrappers/PosixLike"/* || true sed 's|python |python2 |g' -i "${EDK_TOOLS_PATH}/Tests/GNUmakefile" - ## Fix GCC Warning as error + msg "Fix GCC Warning as error" sed 's|-Werror |-Wno-error -Wno-unused-but-set-variable |g' -i "${EDK_TOOLS_PATH}/Source/C/Makefiles/header.makefile" || true sed 's|-Werror |-Wno-error -Wno-unused-but-set-variable |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true - ## Fix GCC >=4.7 error - gcc: error: unrecognized command line option '-melf_x86_64' + msg "Fix GCC >=4.7 error - gcc: error: unrecognized command line option '-melf_x86_64'" sed 's| -m64 --64 -melf_x86_64| -m64|g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true sed 's|--64 | |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true sed 's| -m64 -melf_x86_64| -m64|g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true - ## Remove GCC -g debug option and add -0s -mabi=ms + msg "Remove GCC -g debug option and add -0s -mabi=ms" sed 's|DEFINE GCC_ALL_CC_FLAGS = -g |DEFINE GCC_ALL_CC_FLAGS = -Os -mabi=ms |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true sed 's|DEFINE GCC44_ALL_CC_FLAGS = -g |DEFINE GCC44_ALL_CC_FLAGS = -Os -mabi=ms |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true - ## Fix UDK Target Platform + msg "Fix UDK Target Platform" sed "s|ACTIVE_PLATFORM = Nt32Pkg/Nt32Pkg.dsc|ACTIVE_PLATFORM = ${_UDK_TARGET}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true sed "s|TARGET = DEBUG|TARGET = ${_TIANOCORE_TARGET}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true sed "s|TOOL_CHAIN_TAG = MYTOOLS|TOOL_CHAIN_TAG = ${_COMPILER}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true - ## Setup UDK Environment + msg "Fix UDK Target ARCH for rEFInd" + sed "s|X64|${_TIANO_ARCH}|g" -i "${_UDK_DIR}/Conf/target.txt" || true + sed "s|IA32|${_TIANO_ARCH}|g" -i "${_UDK_DIR}/Conf/target.txt" || true + chmod +x "${_UDK_DIR}/BaseTools/BuildEnv" - source "${_UDK_DIR}/BaseTools/BuildEnv" BaseTools - echo - ## Compile UDK BaseTools - make -C "${EDK_TOOLS_PATH}" - echo +} + +_prepare_refind_sources() { - ## Compile UDK x86_64-UEFI Libraries - "${EDK_TOOLS_PATH}/BinWrappers/PosixLike/build" -p "${_UDK_TARGET}" -a "${_TIANO_ARCH}" -b "${_TIANOCORE_TARGET}" -t "${_COMPILER}" - echo + cd "${srcdir}/refind-${pkgver}/" - ## Fix UDK Target ARCH for rEFInd - sed "s|IA32|${_TIANO_ARCH}|g" -i "${_UDK_DIR}/Conf/target.txt" || true + msg "Fix UDK Path in rEFInd Makefiles" + sed "s|EDK2BASE = /usr/local/UDK2010/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/Make.tiano" || true + sed "s|EDK2BASE = /usr/local/UDK2010/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/filesystems/Make.tiano" || true + sed "s|EDK2BASE = /usr/local/UDK2010/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/gptsync/Make.tiano" || true } +prepare() { + + msg "Prepare Tianocore Sources" + _prepare_tianocore_sources + + msg "Prepare rEFInd Sources" + _prepare_refind_sources + +} + build() { - _tianocore_udk_common + _setup_env_vars + + cd "${_UDK_DIR}/" + + msg "Unset all compiler FLAGS" + unset CFLAGS + unset CPPFLAGS + unset CXXFLAGS + unset LDFLAGS + unset MAKEFLAGS + + msg "Setup UDK Environment" + source "${_UDK_DIR}/BaseTools/BuildEnv" BaseTools echo + msg "Compile UDK BaseTools" + make -C "${EDK_TOOLS_PATH}" + echo + + msg "Compile UDK Libraries" + "${EDK_TOOLS_PATH}/BinWrappers/PosixLike/build" -p "${_UDK_TARGET}" -a "${_TIANO_ARCH}" -b "${_TIANOCORE_TARGET}" -t "${_COMPILER}" + echo + cd "${srcdir}/refind-${pkgver}/" - ## Fix UDK Path in rEFInd Makefiles - sed "s|EDK2BASE = /usr/local/UDK2010/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/Make.tiano" || true - sed "s|EDK2BASE = /usr/local/UDK2010/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/filesystems/Make.tiano" || true - sed "s|EDK2BASE = /usr/local/UDK2010/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/gptsync/Make.tiano" || true - - ## Unset all FLAGS + msg "Unset all compiler FLAGS" unset CFLAGS unset CPPFLAGS unset CXXFLAGS unset LDFLAGS unset MAKEFLAGS - ## Compile refind.efi + msg "Compile rEFInd UEFI application" make tiano + echo - ## Compile UEFI FS drivers + msg "Compile UEFI FS drivers" make fs + echo } package() { - ## Install the rEFInd UEFI application + msg "Install the rEFInd UEFI application" install -d "${pkgdir}/usr/lib/refind/" install -D -m0644 "${srcdir}/refind-${pkgver}/refind/refind_${_TIANO_S_ARCH}.efi" "${pkgdir}/usr/lib/refind/refind_${_TIANO_S_ARCH}.efi" - ## Install UEFI drivers built from rEFInd + msg "Install UEFI drivers built from rEFInd" install -d "${pkgdir}/usr/lib/refind/drivers_${_TIANO_S_ARCH}/" install -D -m0644 "${srcdir}/refind-${pkgver}/drivers_${_TIANO_S_ARCH}"/*.efi "${pkgdir}/usr/lib/refind/drivers_${_TIANO_S_ARCH}/" - ## Install UEFI applications built from rEFInd + msg "Install UEFI applications built from rEFInd" install -d "${pkgdir}/usr/lib/refind/tools_${_TIANO_S_ARCH}" install -D -m0644 "${srcdir}/refind-${pkgver}/gptsync/gptsync_${_TIANO_S_ARCH}.efi" "${pkgdir}/usr/lib/refind/tools_${_TIANO_S_ARCH}/gptsync_${_TIANO_S_ARCH}.efi" - ## Install the rEFInd config file + msg "Install the rEFInd config file" install -d "${pkgdir}/usr/lib/refind/config/" install -D -m0644 "${srcdir}/refind-${pkgver}/refind.conf-sample" "${pkgdir}/usr/lib/refind/config/refind.conf" install -D -m0644 "${srcdir}/refind_linux.conf" "${pkgdir}/usr/lib/refind/config/refind_linux.conf" - ## Install the rEFInd docs + msg "Install the rEFInd docs" install -d "${pkgdir}/usr/share/refind/docs/html/" install -d "${pkgdir}/usr/share/refind/docs/Styles/" install -D -m0644 "${srcdir}/refind-${pkgver}/docs/refind"/* "${pkgdir}/usr/share/refind/docs/html/" @@ -174,37 +205,29 @@ install -D -m0644 "${srcdir}/refind-${pkgver}/NEWS.txt" "${pkgdir}/usr/share/refind/docs/NEWS" rm -f "${pkgdir}/usr/share/refind/docs/html/.DS_Store" || true - ## Install the rEFInd fonts + msg "Install the rEFInd fonts" install -d "${pkgdir}/usr/share/refind/fonts/" install -D -m0644 "${srcdir}/refind-${pkgver}/fonts"/* "${pkgdir}/usr/share/refind/fonts/" rm -f "${pkgdir}/usr/share/refind/fonts/mkfont.sh" - ## Install the rEFInd mkfont.sh + msg "Install the rEFInd mkfont.sh" install -d "${pkgdir}/usr/bin/" install -D -m0755 "${srcdir}/refind-${pkgver}/fonts/mkfont.sh" "${pkgdir}/usr/bin/refind-mkfont" - ## Install the rEFInd icons + msg "Install the rEFInd icons" install -d "${pkgdir}/usr/share/refind/icons/" install -D -m0644 "${srcdir}/refind-${pkgver}/icons"/* "${pkgdir}/usr/share/refind/icons/" - ## Install the rEFInd images + msg "Install the rEFInd images" install -d "${pkgdir}/usr/share/refind/images/" install -D -m0644 "${srcdir}/refind-${pkgver}/images"/*.{png,bmp} "${pkgdir}/usr/share/refind/images/" - ## Install the rEFInd keys + msg "Install the rEFInd keys" install -d "${pkgdir}/usr/share/refind/keys/" install -D -m0644 "${srcdir}/refind-${pkgver}/keys"/* "${pkgdir}/usr/share/refind/keys/" - ## Install the rEFIt license file, since rEFInd is a fork of rEFIt + msg "Install the rEFIt license file, since rEFInd is a fork of rEFIt" install -d "${pkgdir}/usr/share/licenses/refind/" install -D -m0644 "${srcdir}/refind-${pkgver}/LICENSE.txt" "${pkgdir}/usr/share/licenses/refind/LICENSE" } -sha1sums=('f71f00dbbe8c068c9ef80f468835c998832d364f' - '4d1992699f9b48dd2b7e6bd6c0b25fc065f75894' - '3d53eb615c3363d45feb95b9bfbf1d5491bf1c24' - 'SKIP' - 'SKIP' - 'SKIP' - 'SKIP' - 'SKIP') Deleted: UDK-MdePkg-Revert-PathNodeCount.patch =================================================================== --- UDK-MdePkg-Revert-PathNodeCount.patch 2013-07-09 13:17:26 UTC (rev 189849) +++ UDK-MdePkg-Revert-PathNodeCount.patch 2013-07-09 13:35:57 UTC (rev 189850) @@ -1,660 +0,0 @@ -commit 771729c77fa49cf0ff17491f371003c4f5d66f85 -Author: niruiyu <niruiyu@6f19259b-4bc3-4df7-8a09-765794883524> -Date: Mon Sep 24 03:20:35 2012 +0000 - - Add new API IsDevicePathValid() to UefiDevicePathLib. - - Signed-off-by: Ruiyu Ni<[email protected]> - Reviewed-by: Liming Gao<[email protected]> - Reviewed-by: Kinney Michael D<[email protected]> - - git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13737 6f19259b-4bc3-4df7-8a09-765794883524 - -diff --git a/MdePkg/Include/Library/DevicePathLib.h b/MdePkg/Include/Library/DevicePathLib.h -index 68b1f1b..37acd45 100644 ---- a/MdePkg/Include/Library/DevicePathLib.h -+++ b/MdePkg/Include/Library/DevicePathLib.h -@@ -4,7 +4,7 @@ - This library provides defines, macros, and functions to help create and parse - EFI_DEVICE_PATH_PROTOCOL structures. - --Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> -+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR> - This program and the accompanying materials are licensed and made available under - the terms and conditions of the BSD License that accompanies this distribution. - The full text of the license may be found at -@@ -21,6 +21,28 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - #define END_DEVICE_PATH_LENGTH (sizeof (EFI_DEVICE_PATH_PROTOCOL)) - - /** -+ Determine whether a given device path is valid. -+ If DevicePath is NULL, then ASSERT(). -+ -+ @param DevicePath A pointer to a device path data structure. -+ @param MaxSize The maximum size of the device path data structure. -+ -+ @retval TRUE DevicePath is valid. -+ @retval FALSE The length of any node node in the DevicePath is less -+ than sizeof (EFI_DEVICE_PATH_PROTOCOL). -+ @retval FALSE If MaxSize is not zero, the size of the DevicePath -+ exceeds MaxSize. -+ @retval FALSE If PcdMaximumDevicePathNodeCount is not zero, the node -+ count of the DevicePath exceeds PcdMaximumDevicePathNodeCount. -+**/ -+BOOLEAN -+EFIAPI -+IsDevicePathValid ( -+ IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, -+ IN UINTN MaxSize -+ ); -+ -+/** - Returns the Type field of a device path node. - - Returns the Type field of the device path node specified by Node. -@@ -123,7 +145,8 @@ IsDevicePathEndType ( - Determines if a device path node is an end node of an entire device path. - - Determines if a device path node specified by Node is an end node of an entire device path. -- If Node represents the end of an entire device path, then TRUE is returned. Otherwise, FALSE is returned. -+ If Node represents the end of an entire device path, then TRUE is returned. -+ Otherwise, FALSE is returned. - - If Node is NULL, then ASSERT(). - -@@ -143,7 +166,8 @@ IsDevicePathEnd ( - Determines if a device path node is an end node of a device path instance. - - Determines if a device path node specified by Node is an end node of a device path instance. -- If Node represents the end of a device path instance, then TRUE is returned. Otherwise, FALSE is returned. -+ If Node represents the end of a device path instance, then TRUE is returned. -+ Otherwise, FALSE is returned. - - If Node is NULL, then ASSERT(). - -@@ -169,6 +193,7 @@ IsDevicePathEndInstance ( - - If Node is NULL, then ASSERT(). - If NodeLength >= 0x10000, then ASSERT(). -+ If NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL), then ASSERT(). - - @param Node A pointer to a device path node data structure. - @param Length The length, in bytes, of the device path node. -@@ -208,13 +233,14 @@ SetDevicePathEndNode ( - /** - Returns the size of a device path in bytes. - -- This function returns the size, in bytes, of the device path data structure specified by -- DevicePath including the end of device path node. If DevicePath is NULL, then 0 is returned. -+ This function returns the size, in bytes, of the device path data structure -+ specified by DevicePath including the end of device path node. -+ If DevicePath is NULL or invalid, then 0 is returned. - -- @param DevicePath A pointer to a device path data structure. -- -- @retval 0 DevicePath is NULL. -- @retval Others The size of a device path in bytes. -+ @param DevicePath A pointer to a device path data structure. -+ -+ @retval 0 If DevicePath is NULL or invalid. -+ @retval Others The size of a device path in bytes. - - **/ - UINTN -@@ -235,7 +261,7 @@ GetDevicePathSize ( - - @param DevicePath A pointer to a device path data structure. - -- @retval NULL DevicePath is NULL. -+ @retval NULL DevicePath is NULL or invalid. - @retval Others A pointer to the duplicated device path. - - **/ -@@ -263,6 +289,7 @@ DuplicateDevicePath ( - @param SecondDevicePath A pointer to a device path data structure. - - @retval NULL If there is not enough memory for the newly allocated buffer. -+ @retval NULL If FirstDevicePath or SecondDevicePath is invalid. - @retval Others A pointer to the new device path if success. - Or a copy an end-of-device-path if both FirstDevicePath and SecondDevicePath are NULL. - -@@ -316,6 +343,7 @@ AppendDevicePathNode ( - and a new end-of-device-path-instance node is inserted between. - If DevicePath is NULL, then a copy if DevicePathInstance is returned. - If DevicePathInstance is NULL, then NULL is returned. -+ If DevicePath or DevicePathInstance is invalid, then NULL is returned. - If there is not enough memory to allocate space for the new device path, then NULL is returned. - The memory is allocated from EFI boot services memory. It is the responsibility of the caller to - free the memory allocated. -@@ -341,6 +369,7 @@ AppendDevicePathInstance ( - point to the next device path instance in the device path (or NULL if no more) and updates Size - to hold the size of the device path instance copy. - If DevicePath is NULL, then NULL is returned. -+ If DevicePath points to a invalid device path, then NULL is returned. - If there is not enough memory to allocate space for the new device path, then NULL is returned. - The memory is allocated from EFI boot services memory. It is the responsibility of the caller to - free the memory allocated. -@@ -394,12 +423,13 @@ CreateDeviceNode ( - Determines if a device path is single or multi-instance. - - This function returns TRUE if the device path specified by DevicePath is multi-instance. -- Otherwise, FALSE is returned. If DevicePath is NULL, then FALSE is returned. -+ Otherwise, FALSE is returned. -+ If DevicePath is NULL or invalid, then FALSE is returned. - - @param DevicePath A pointer to a device path data structure. - - @retval TRUE DevicePath is multi-instance. -- @retval FALSE DevicePath is not multi-instance, or DevicePath is NULL. -+ @retval FALSE DevicePath is not multi-instance, or DevicePath is NULL or invalid. - - **/ - BOOLEAN -diff --git a/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.c b/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.c -index db065e4..a91a7a3 100644 ---- a/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.c -+++ b/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.c -@@ -8,7 +8,7 @@ - environment varibles. Multi-instance device paths should never be placed - on a Handle. - -- Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> -+ Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR> - This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at -@@ -28,6 +28,7 @@ - #include <Library/MemoryAllocationLib.h> - #include <Library/UefiBootServicesTableLib.h> - #include <Library/BaseLib.h> -+#include <Library/PcdLib.h> - - // - // Template for an end-of-device path node. -@@ -42,6 +43,61 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST EFI_DEVICE_PATH_PROTOCOL mUefiDevicePathLib - }; - - /** -+ Determine whether a given device path is valid. -+ If DevicePath is NULL, then ASSERT(). -+ -+ @param DevicePath A pointer to a device path data structure. -+ @param MaxSize The maximum size of the device path data structure. -+ -+ @retval TRUE DevicePath is valid. -+ @retval FALSE The length of any node node in the DevicePath is less -+ than sizeof (EFI_DEVICE_PATH_PROTOCOL). -+ @retval FALSE If MaxSize is not zero, the size of the DevicePath -+ exceeds MaxSize. -+ @retval FALSE If PcdMaximumDevicePathNodeCount is not zero, the node -+ count of the DevicePath exceeds PcdMaximumDevicePathNodeCount. -+**/ -+BOOLEAN -+EFIAPI -+IsDevicePathValid ( -+ IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, -+ IN UINTN MaxSize -+ ) -+{ -+ UINTN Count; -+ UINTN Size; -+ UINTN NodeLength; -+ -+ ASSERT (DevicePath != NULL); -+ -+ for (Count = 0, Size = 0; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) { -+ NodeLength = DevicePathNodeLength (DevicePath); -+ if (NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) { -+ return FALSE; -+ } -+ -+ if (MaxSize > 0) { -+ Size += NodeLength; -+ if (Size + END_DEVICE_PATH_LENGTH > MaxSize) { -+ return FALSE; -+ } -+ } -+ -+ if (PcdGet32 (PcdMaximumDevicePathNodeCount) > 0) { -+ Count++; -+ if (Count >= PcdGet32 (PcdMaximumDevicePathNodeCount)) { -+ return FALSE; -+ } -+ } -+ } -+ -+ // -+ // Only return TRUE when the End Device Path node is valid. -+ // -+ return (BOOLEAN) (DevicePathNodeLength (DevicePath) == END_DEVICE_PATH_LENGTH); -+} -+ -+/** - Returns the Type field of a device path node. - - Returns the Type field of the device path node specified by Node. -@@ -106,8 +162,12 @@ DevicePathNodeLength ( - IN CONST VOID *Node - ) - { -+ UINTN Length; -+ - ASSERT (Node != NULL); -- return ReadUnaligned16 ((UINT16 *)&((EFI_DEVICE_PATH_PROTOCOL *)(Node))->Length[0]); -+ Length = ReadUnaligned16 ((UINT16 *)&((EFI_DEVICE_PATH_PROTOCOL *)(Node))->Length[0]); -+ ASSERT (Length >= sizeof (EFI_DEVICE_PATH_PROTOCOL)); -+ return Length; - } - - /** -@@ -227,7 +287,8 @@ IsDevicePathEndInstance ( - be used to set the contents of the Length field. - - If Node is NULL, then ASSERT(). -- If NodeLength >= 0x10000, then ASSERT(). -+ If NodeLength >= SIZE_64KB, then ASSERT(). -+ If NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL), then ASSERT(). - - @param Node A pointer to a device path node data structure. - @param Length The length, in bytes, of the device path node. -@@ -243,7 +304,7 @@ SetDevicePathNodeLength ( - ) - { - ASSERT (Node != NULL); -- ASSERT (Length < 0x10000); -+ ASSERT ((Length >= sizeof (EFI_DEVICE_PATH_PROTOCOL)) && (Length < SIZE_64KB)); - return WriteUnaligned16 ((UINT16 *)&((EFI_DEVICE_PATH_PROTOCOL *)(Node))->Length[0], (UINT16)(Length)); - } - -@@ -277,12 +338,12 @@ SetDevicePathEndNode ( - Returns the size of a device path in bytes. - - This function returns the size, in bytes, of the device path data structure -- specified by DevicePath including the end of device path node. If DevicePath -- is NULL, then 0 is returned. -+ specified by DevicePath including the end of device path node. -+ If DevicePath is NULL or invalid, then 0 is returned. - - @param DevicePath A pointer to a device path data structure. -- -- @retval 0 If DevicePath is NULL. -+ -+ @retval 0 If DevicePath is NULL or invalid. - @retval Others The size of a device path in bytes. - - **/ -@@ -298,6 +359,10 @@ GetDevicePathSize ( - return 0; - } - -+ if (!IsDevicePathValid (DevicePath, 0)) { -+ return 0; -+ } -+ - // - // Search for the end of the device path structure - // -@@ -324,7 +389,7 @@ GetDevicePathSize ( - - @param DevicePath A pointer to a device path data structure. - -- @retval NULL If DevicePath is NULL. -+ @retval NULL DevicePath is NULL or invalid. - @retval Others A pointer to the duplicated device path. - - **/ -@@ -370,6 +435,7 @@ DuplicateDevicePath ( - @param SecondDevicePath A pointer to a device path data structure. - - @retval NULL If there is not enough memory for the newly allocated buffer. -+ @retval NULL If FirstDevicePath or SecondDevicePath is invalid. - @retval Others A pointer to the new device path if success. - Or a copy an end-of-device-path if both FirstDevicePath and SecondDevicePath are NULL. - -@@ -398,6 +464,10 @@ AppendDevicePath ( - return DuplicateDevicePath (FirstDevicePath); - } - -+ if (!IsDevicePathValid (FirstDevicePath, 0) || !IsDevicePathValid (SecondDevicePath, 0)) { -+ return NULL; -+ } -+ - // - // Allocate space for the combined device path. It only has one end node of - // length EFI_DEVICE_PATH_PROTOCOL. -@@ -500,6 +570,7 @@ AppendDevicePathNode ( - path instance and a new end-of-device-path-instance node is inserted between. - If DevicePath is NULL, then a copy if DevicePathInstance is returned. - If DevicePathInstance is NULL, then NULL is returned. -+ If DevicePath or DevicePathInstance is invalid, then NULL is returned. - If there is not enough memory to allocate space for the new device path, then - NULL is returned. - The memory is allocated from EFI boot services memory. It is the responsibility -@@ -531,6 +602,10 @@ AppendDevicePathInstance ( - return NULL; - } - -+ if (!IsDevicePathValid (DevicePath, 0) || !IsDevicePathValid (DevicePathInstance, 0)) { -+ return NULL; -+ } -+ - SrcSize = GetDevicePathSize (DevicePath); - InstanceSize = GetDevicePathSize (DevicePathInstance); - -@@ -559,6 +634,7 @@ AppendDevicePathInstance ( - DevicePath to point to the next device path instance in the device path (or NULL - if no more) and updates Size to hold the size of the device path instance copy. - If DevicePath is NULL, then NULL is returned. -+ If DevicePath points to a invalid device path, then NULL is returned. - If there is not enough memory to allocate space for the new device path, then - NULL is returned. - The memory is allocated from EFI boot services memory. It is the responsibility -@@ -596,6 +672,10 @@ GetNextDevicePathInstance ( - return NULL; - } - -+ if (!IsDevicePathValid (*DevicePath, 0)) { -+ return NULL; -+ } -+ - // - // Find the end of the device path instance - // -@@ -681,13 +761,14 @@ CreateDeviceNode ( - - This function returns TRUE if the device path specified by DevicePath is - multi-instance. -- Otherwise, FALSE is returned. If DevicePath is NULL, then FALSE is returned. -+ Otherwise, FALSE is returned. -+ If DevicePath is NULL or invalid, then FALSE is returned. - - @param DevicePath A pointer to a device path data structure. - - @retval TRUE DevicePath is multi-instance. -- @retval FALSE DevicePath is not multi-instance or DevicePath -- is NULL. -+ @retval FALSE DevicePath is not multi-instance, or DevicePath -+ is NULL or invalid. - - **/ - BOOLEAN -@@ -702,6 +783,10 @@ IsDevicePathMultiInstance ( - return FALSE; - } - -+ if (!IsDevicePathValid (DevicePath, 0)) { -+ return FALSE; -+ } -+ - Node = DevicePath; - while (!IsDevicePathEnd (Node)) { - if (IsDevicePathEndInstance (Node)) { -@@ -776,15 +861,14 @@ FileDevicePath ( - IN CONST CHAR16 *FileName - ) - { -- UINT16 Size; -+ UINTN Size; - FILEPATH_DEVICE_PATH *FilePath; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - EFI_DEVICE_PATH_PROTOCOL *FileDevicePath; - - DevicePath = NULL; - -- Size = (UINT16) StrSize (FileName); -- -+ Size = StrSize (FileName); - FileDevicePath = AllocatePool (Size + SIZE_OF_FILEPATH_DEVICE_PATH + END_DEVICE_PATH_LENGTH); - if (FileDevicePath != NULL) { - FilePath = (FILEPATH_DEVICE_PATH *) FileDevicePath; -diff --git a/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf b/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf -index c34301d..2ae151d 100644 ---- a/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf -+++ b/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf -@@ -3,7 +3,7 @@ - # - # Device Path Library that layers on top of the Memory Allocation Library. - # --# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR> -+# Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR> - # - # This program and the accompanying materials - # are licensed and made available under the terms and conditions of the BSD License -@@ -42,8 +42,10 @@ - MemoryAllocationLib - DebugLib - BaseMemoryLib -- -+ PcdLib - - [Protocols] - gEfiDevicePathProtocolGuid ## CONSUMES - -+[Pcd] -+ gEfiMdePkgTokenSpaceGuid.PcdMaximumDevicePathNodeCount -diff --git a/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLib.c b/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLib.c -index 8275dd6..1052988 100644 ---- a/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLib.c -+++ b/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLib.c -@@ -2,7 +2,7 @@ - Library instance that implement UEFI Device Path Library class based on protocol - gEfiDevicePathUtilitiesProtocolGuid. - -- Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> -+ Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR> - This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at -@@ -24,6 +24,7 @@ - #include <Library/MemoryAllocationLib.h> - #include <Library/BaseMemoryLib.h> - #include <Library/UefiBootServicesTableLib.h> -+#include <Library/PcdLib.h> - - EFI_DEVICE_PATH_UTILITIES_PROTOCOL *mDevicePathUtilities = NULL; - -@@ -72,6 +73,61 @@ DevicePathLibConstructor ( - } - - /** -+ Determine whether a given device path is valid. -+ If DevicePath is NULL, then ASSERT(). -+ -+ @param DevicePath A pointer to a device path data structure. -+ @param MaxSize The maximum size of the device path data structure. -+ -+ @retval TRUE DevicePath is valid. -+ @retval FALSE The length of any node node in the DevicePath is less -+ than sizeof (EFI_DEVICE_PATH_PROTOCOL). -+ @retval FALSE If MaxSize is not zero, the size of the DevicePath -+ exceeds MaxSize. -+ @retval FALSE If PcdMaximumDevicePathNodeCount is not zero, the node -+ count of the DevicePath exceeds PcdMaximumDevicePathNodeCount. -+**/ -+BOOLEAN -+EFIAPI -+IsDevicePathValid ( -+ IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, -+ IN UINTN MaxSize -+ ) -+{ -+ UINTN Count; -+ UINTN Size; -+ UINTN NodeLength; -+ -+ ASSERT (DevicePath != NULL); -+ -+ for (Count = 0, Size = 0; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) { -+ NodeLength = DevicePathNodeLength (DevicePath); -+ if (NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) { -+ return FALSE; -+ } -+ -+ if (MaxSize > 0) { -+ Size += NodeLength; -+ if (Size + END_DEVICE_PATH_LENGTH > MaxSize) { -+ return FALSE; -+ } -+ } -+ -+ if (PcdGet32 (PcdMaximumDevicePathNodeCount) > 0) { -+ Count++; -+ if (Count >= PcdGet32 (PcdMaximumDevicePathNodeCount)) { -+ return FALSE; -+ } -+ } -+ } -+ -+ // -+ // Only return TRUE when the End Device Path node is valid. -+ // -+ return (BOOLEAN) (DevicePathNodeLength (DevicePath) == END_DEVICE_PATH_LENGTH); -+} -+ -+/** - Returns the Type field of a device path node. - - Returns the Type field of the device path node specified by Node. -@@ -136,8 +192,12 @@ DevicePathNodeLength ( - IN CONST VOID *Node - ) - { -+ UINTN Length; -+ - ASSERT (Node != NULL); -- return ReadUnaligned16 ((UINT16 *)&((EFI_DEVICE_PATH_PROTOCOL *)(Node))->Length[0]); -+ Length = ReadUnaligned16 ((UINT16 *)&((EFI_DEVICE_PATH_PROTOCOL *)(Node))->Length[0]); -+ ASSERT (Length >= sizeof (EFI_DEVICE_PATH_PROTOCOL)); -+ return Length; - } - - /** -@@ -256,7 +316,8 @@ IsDevicePathEndInstance ( - be used to set the contents of the Length field. - - If Node is NULL, then ASSERT(). -- If NodeLength >= 0x10000, then ASSERT(). -+ If NodeLength >= SIZE_64KB, then ASSERT(). -+ If NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL), then ASSERT(). - - @param Node A pointer to a device path node data structure. - @param Length The length, in bytes, of the device path node. -@@ -272,7 +333,7 @@ SetDevicePathNodeLength ( - ) - { - ASSERT (Node != NULL); -- ASSERT (Length < 0x10000); -+ ASSERT ((Length >= sizeof (EFI_DEVICE_PATH_PROTOCOL)) && (Length < SIZE_64KB)); - return WriteUnaligned16 ((UINT16 *)&((EFI_DEVICE_PATH_PROTOCOL *)(Node))->Length[0], (UINT16)(Length)); - } - -@@ -305,13 +366,14 @@ SetDevicePathEndNode ( - /** - Returns the size of a device path in bytes. - -- This function returns the size, in bytes, of the device path data structure specified by -- DevicePath including the end of device path node. If DevicePath is NULL, then 0 is returned. -+ This function returns the size, in bytes, of the device path data structure -+ specified by DevicePath including the end of device path node. -+ If DevicePath is NULL or invalid, then 0 is returned. - -- @param DevicePath A pointer to a device path data structure. -- -- @retval 0 If DevicePath is NULL. -- @retval Others The size of a device path in bytes. -+ @param DevicePath A pointer to a device path data structure. -+ -+ @retval 0 If DevicePath is NULL or invalid. -+ @retval Others The size of a device path in bytes. - - **/ - UINTN -@@ -336,7 +398,7 @@ GetDevicePathSize ( - - @param DevicePath A pointer to a device path data structure. - -- @retval NULL If DevicePath is NULL. -+ @retval NULL If DevicePath is NULL or invalid. - @retval Others A pointer to the duplicated device path. - - **/ -@@ -367,6 +429,7 @@ DuplicateDevicePath ( - @param SecondDevicePath A pointer to a device path data structure. - - @retval NULL If there is not enough memory for the newly allocated buffer. -+ @retval NULL If FirstDevicePath or SecondDevicePath is invalid. - @retval Others A pointer to the new device path if success. - Or a copy an end-of-device-path if both FirstDevicePath and - SecondDevicePath are NULL. -@@ -431,6 +494,7 @@ AppendDevicePathNode ( - path instance and a new end-of-device-path-instance node is inserted between. - If DevicePath is NULL, then a copy if DevicePathInstance is returned. - If DevicePathInstance is NULL, then NULL is returned. -+ If DevicePath or DevicePathInstance is invalid, then NULL is returned. - If there is not enough memory to allocate space for the new device path, then - NULL is returned. - The memory is allocated from EFI boot services memory. It is the responsibility -@@ -524,15 +588,16 @@ CreateDeviceNode ( - /** - Determines if a device path is single or multi-instance. - -- This function returns TRUE if the device path specified by DevicePath is -+ This function returns TRUE if the device path specified by DevicePath is - multi-instance. -- Otherwise, FALSE is returned. If DevicePath is NULL, then FALSE is returned. -+ Otherwise, FALSE is returned. -+ If DevicePath is NULL or invalid, then FALSE is returned. - - @param DevicePath A pointer to a device path data structure. - - @retval TRUE DevicePath is multi-instance. -- @retval FALSE DevicePath is not multi-instance or DevicePath -- is NULL. -+ @retval FALSE DevicePath is not multi-instance, or DevicePath -+ is NULL or invalid. - - **/ - BOOLEAN -diff --git a/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLibDevicePathProtocol.inf b/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLibDevicePathProtocol.inf -index 3393830..16b47e3 100644 ---- a/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLibDevicePathProtocol.inf -+++ b/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLibDevicePathProtocol.inf -@@ -4,7 +4,7 @@ - # Device Path Library that layers on top of the UEFI 2.0 Device Path Protocol. - # This library is not available for EFI 1.10 modules. - # --# Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR> -+# Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR> - # - # This program and the accompanying materials - # are licensed and made available under the terms and conditions of the BSD License -@@ -44,11 +44,14 @@ - MemoryAllocationLib - BaseLib - DebugLib -- -+ PcdLib - - [Protocols] - gEfiDevicePathProtocolGuid ## CONSUMES - gEfiDevicePathUtilitiesProtocolGuid ## CONSUMES - -+[Pcd] -+ gEfiMdePkgTokenSpaceGuid.PcdMaximumDevicePathNodeCount -+ - [Depex.common.DXE_DRIVER, Depex.common.DXE_RUNTIME_DRIVER, Depex.common.DXE_SAL_DRIVER, Depex.common.DXE_SMM_DRIVER] - gEfiDevicePathUtilitiesProtocolGuid -diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec -index b29cb01..aefba3f 100644 ---- a/MdePkg/MdePkg.dec -+++ b/MdePkg/MdePkg.dec -@@ -1287,6 +1287,9 @@ - ## Indicates the maximum node number of linked list - gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000|UINT32|0x00000003 - -+ ## Indicates the maximum node number of device path -+ gEfiMdePkgTokenSpaceGuid.PcdMaximumDevicePathNodeCount|0|UINT32|0x00000029 -+ - ## Indicates the timeout tick of holding spin lock - gEfiMdePkgTokenSpaceGuid.PcdSpinLockTimeout|10000000|UINT32|0x00000004 - Deleted: refind_include_more_shell_paths.patch =================================================================== --- refind_include_more_shell_paths.patch 2013-07-09 13:17:26 UTC (rev 189849) +++ refind_include_more_shell_paths.patch 2013-07-09 13:35:57 UTC (rev 189850) @@ -1,13 +0,0 @@ -diff --git a/refind/main.c b/refind/main.c -index beac3bf..1a2cf58 100644 ---- a/refind/main.c -+++ b/refind/main.c -@@ -62,5 +62,5 @@ - #define SHELL_NAMES L"\\EFI\\tools\\shell.efi,\\EFI\\tools\\shellia32.efi,\\shellia32.efi" - #define DRIVER_DIRS L"drivers,drivers_ia32" - #else --#define SHELL_NAMES L"\\EFI\\tools\\shell.efi" -+#define SHELL_NAMES L"\\EFI\\tools\\shell.efi,\\shell.efi" - #define DRIVER_DIRS L"drivers" - #endif -
