Skip to contentSkip to conversation

efi_loader: fix TEST_PROTOCOL case in OpenProtocol()

PATCH New Rob Clark 2 participants 3 messages Sep 16, 2017 – Sep 17, 2017

lore
Share & tools
lore

Rob Clark

author
#0 lore raw

PATCH 1/1 efi_loader: fix TEST_PROTOCOL case in OpenProtocol()

In the TEST_PROTOCOL case, protocol_interface might be NULL, and at any rate should not be touched. So skip efi_protocol_open() in this case.

Fixes "efi_loader: open_info in OpenProtocol"
---
 lib/efi_loader/efi_boottime.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
lib/efi_loader/efi_boottime.c +1 -1
index 72a0c932a6..f1f0e021b9 100644
@@ -1723,7 +1723,7 @@ efi_status_t EFIAPI efi_open_protocol(
 	}
 
 	r = efi_search_protocol(handle, protocol, &handler);
-	if (r != EFI_SUCCESS)
+	if (r != EFI_SUCCESS || attributes == EFI_OPEN_PROTOCOL_TEST_PROTOCOL)
 		goto out;
 
 	r = efi_protocol_open(handler, protocol_interface, agent_handle,
Signature · 1 line
2.13.5
#1 lore raw

PATCH 1/1 efi_loader: fix TEST_PROTOCOL case in OpenProtocol()

Quoted 15 lines · Rob Clark

In the TEST_PROTOCOL case, protocol_interface might be NULL, and at any rate should not be touched. So skip efi_protocol_open() in this case.

Fixes "efi_loader: open_info in OpenProtocol"
---
 lib/efi_loader/efi_boottime.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
lib/efi_loader/efi_boottime.c +0 -0
index 72a0c932a6..f1f0e021b9 100644

lib/efi_loader/efi_boottime.c efi_status_t EFIAPI efi_open_protocol( · line 1729

Quoted 8 lines
lib/efi_loader/efi_boottime.c +1 -1
@@ -1723,7 +1723,7 @@ efi_status_t EFIAPI efi_open_protocol(
 	}
 
 	r = efi_search_protocol(handle, protocol, &handler);
-	if (r != EFI_SUCCESS)
+	if (r != EFI_SUCCESS || attributes == EFI_OPEN_PROTOCOL_TEST_PROTOCOL)
 		goto out;
 
 	r = efi_protocol_open(handler, protocol_interface, agent_handle,

Thank you for pointing to a problem in my patch

efi_loader: open_info in OpenProtocol
https://patchwork.ozlabs.org/patch/806178/

Your patch makes OpenProtocol conform with this requirement cited from the UEFI spec:

"TEST_PROTOCOL - Used by a driver to test for the existence of a protocol interface on a handle. Interface is optional for this attribute value, so it is ignored, and the caller should only use the return status code. The caller is also not required to close the protocol interface with CloseProtocol()".

The last sentence implies that we should not update the OpenProtocolInformation for TEST_PROTOCOL. We should put this into a test.

There are anyway other review comments I have to consider when resubmitting my patch series for the protocol services. So I would prefer to just integrate this correction into my patch instead of adding a separate one.

Best regards

Heinrich

author
#2 lore raw

PATCH 1/1 efi_loader: fix TEST_PROTOCOL case in OpenProtocol()

Quoted 39 lines · Heinrich Schuchardt
Quoted 15 lines · Rob Clark

In the TEST_PROTOCOL case, protocol_interface might be NULL, and at any rate should not be touched. So skip efi_protocol_open() in this case.

Fixes "efi_loader: open_info in OpenProtocol"
---
 lib/efi_loader/efi_boottime.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
lib/efi_loader/efi_boottime.c +0 -0
index 72a0c932a6..f1f0e021b9 100644

lib/efi_loader/efi_boottime.c efi_status_t EFIAPI efi_open_protocol( · line 1729

Quoted 8 lines
lib/efi_loader/efi_boottime.c +1 -1
@@ -1723,7 +1723,7 @@ efi_status_t EFIAPI efi_open_protocol(
      }
 
      r = efi_search_protocol(handle, protocol, &handler);
-     if (r != EFI_SUCCESS)
+     if (r != EFI_SUCCESS || attributes == EFI_OPEN_PROTOCOL_TEST_PROTOCOL)
              goto out;
 
      r = efi_protocol_open(handler, protocol_interface, agent_handle,

Thank you for pointing to a problem in my patch

efi_loader: open_info in OpenProtocol
https://patchwork.ozlabs.org/patch/806178/

Your patch makes OpenProtocol conform with this requirement cited from the UEFI spec:

"TEST_PROTOCOL - Used by a driver to test for the existence of a protocol interface on a handle. Interface is optional for this attribute value, so it is ignored, and the caller should only use the return status code. The caller is also not required to close the protocol interface with CloseProtocol()".

Quoted 7 lines

The last sentence implies that we should not update the OpenProtocolInformation for TEST_PROTOCOL. We should put this into a test.

There are anyway other review comments I have to consider when resubmitting my patch series for the protocol services. So I would prefer to just integrate this correction into my patch instead of adding a separate one.

Sure, it's fine by me if you just want to squash this into your patch

BR,
-R