[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