[syslinux] HP EFI binaries
Patrick Masotta
masottaus at yahoo.com
Sat Aug 29 00:37:38 PDT 2015
>>>
&& memcmp(mac_1 + PXE_MAC_LENGTH - 5, mac_2 + PXE_MAC_LENGTH - 5, 5) == 0) {
was the code that was able to make a match the mac.
<<<
OK I want you to understand what that line does; PXE_MAC_LENGTH=32 bytes
while in the regular code the memcmp() is run on the whole 32 bytes this
hack only runs it on the last 5 bytes of the MAC. We can consider HP has (minimally)
a bug when implementing the Device Path Protocol for MAC elements.
>>>
It is getting further, now the messages are core_udp_sendto: stalling on configure with no mapping
<<<
After getting the match the code runs
sb_handle = handles[i];
status = uefi_call_wrapper(BS->OpenProtocol, 6, sb_handle,
bguid, (void **)&sbp,
image_handle, sb_handle,
EFI_OPEN_PROTOCOL_GET_PROTOCOL);
here we try to open the just found UDPv4 Service Binding Protocol
Please you have to check the returned status is EFI_SUCCESS after that call.
If not, even when we found a hacked "match" your FW still fails when opening
the corresponding Service Binding protocol.
unfortunately efi_create_binding() from
https://github.com/geneC/syslinux/blob/master/efi/main.c
does not have a console indication when the binding fails.
but if you see the code from
https://github.com/ppatpat/syslinux/blob/master/efi/main.c
you have this extra section printing out to console the GUID of a failed binding.
char buf[120];
sprintf(buf,"EFI Err: Service Binding Protocol failed; EFI_GUID=%08lX-%04hX-%04hX-%016llX EFI_STATUS=%d\n",
(uint32_t)bguid->Data1,
(uint16_t)bguid->Data2,
(uint16_t)bguid->Data3,
BSWAP_64(*(uint64_t*)&bguid->Data4),
status);
char* charptr =buf;
char wbuf [240];
memset(wbuf,0,sizeof(wbuf));
for (i=0; charptr[i]!=0; i++) wbuf[2*i]=charptr[i];
Print(L"%s",wbuf);
a failed binding can lead to the error you see now:
"core_udp_sendto: stalling on configure with no mapping"
Best,
Patrick
More information about the Syslinux
mailing list