Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 23 Jul 2018 20:36:45 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r336653 - in head/stand/efi: include libefi
Message-ID:  <201807232036.w6NKajfu012182@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Mon Jul 23 20:36:45 2018
New Revision: 336653
URL: https://svnweb.freebsd.org/changeset/base/336653

Log:
  Implement efi_devpath_match_node
  
  Returns true if the first node pointed to by devpath1 is identical to
  the first node pointed to by devpath2, with care taken to not read
  past the end of the valid parts of either devpath1 or
  devpath2. Otherwise, returns false.
  
  Sponsored by: Netflix

Modified:
  head/stand/efi/include/efilib.h
  head/stand/efi/libefi/devpath.c

Modified: head/stand/efi/include/efilib.h
==============================================================================
--- head/stand/efi/include/efilib.h	Mon Jul 23 20:36:41 2018	(r336652)
+++ head/stand/efi/include/efilib.h	Mon Jul 23 20:36:45 2018	(r336653)
@@ -85,6 +85,7 @@ EFI_HANDLE efi_devpath_handle(EFI_DEVICE_PATH *);
 EFI_DEVICE_PATH *efi_devpath_last_node(EFI_DEVICE_PATH *);
 EFI_DEVICE_PATH *efi_devpath_trim(EFI_DEVICE_PATH *);
 bool efi_devpath_match(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
+bool efi_devpath_match_node(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
 bool efi_devpath_is_prefix(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
 CHAR16 *efi_devpath_name(EFI_DEVICE_PATH *);
 void efi_free_devpath_name(CHAR16 *);

Modified: head/stand/efi/libefi/devpath.c
==============================================================================
--- head/stand/efi/libefi/devpath.c	Mon Jul 23 20:36:41 2018	(r336652)
+++ head/stand/efi/libefi/devpath.c	Mon Jul 23 20:36:45 2018	(r336653)
@@ -140,25 +140,33 @@ efi_devpath_handle(EFI_DEVICE_PATH *devpath)
 }
 
 bool
-efi_devpath_match(EFI_DEVICE_PATH *devpath1, EFI_DEVICE_PATH *devpath2)
+efi_devpath_match_node(EFI_DEVICE_PATH *devpath1, EFI_DEVICE_PATH *devpath2)
 {
 	size_t len;
 
 	if (devpath1 == NULL || devpath2 == NULL)
 		return (false);
+	if (DevicePathType(devpath1) != DevicePathType(devpath2) ||
+	    DevicePathSubType(devpath1) != DevicePathSubType(devpath2))
+		return (false);
+	len = DevicePathNodeLength(devpath1);
+	if (len != DevicePathNodeLength(devpath2))
+		return (false);
+	if (memcmp(devpath1, devpath2, len) != 0)
+		return (false);
+	return (true);
+}
 
-	while (true) {
-		if (DevicePathType(devpath1) != DevicePathType(devpath2) ||
-		    DevicePathSubType(devpath1) != DevicePathSubType(devpath2))
-			return (false);
+bool
+efi_devpath_match(EFI_DEVICE_PATH *devpath1, EFI_DEVICE_PATH *devpath2)
+{
 
-		len = DevicePathNodeLength(devpath1);
-		if (len != DevicePathNodeLength(devpath2))
-			return (false);
+	if (devpath1 == NULL || devpath2 == NULL)
+		return (false);
 
-		if (memcmp(devpath1, devpath2, len) != 0)
-			return (false);
-
+	while (true) {
+		if (!efi_devpath_match_node(devpath1, devpath2))
+			return false;
 		if (IsDevicePathEnd(devpath1))
 			break;
 		devpath1 = NextDevicePathNode(devpath1);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201807232036.w6NKajfu012182>