mirror of https://github.com/ipxe/ipxe.git
[efi] Check for presence of UNDI in NII protocol
iPXE itself exposes a dummy NII protocol with no UNDI. Avoid potentially dereferencing a NULL pointer by checking for a non-zero UNDI address. Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/32/head
parent
047baaba38
commit
feb3a0f7d5
|
@ -1037,6 +1037,11 @@ static int nii_start ( struct efi_device *efidev ) {
|
||||||
|
|
||||||
/* Locate UNDI and entry point */
|
/* Locate UNDI and entry point */
|
||||||
nii->undi = ( ( void * ) ( intptr_t ) nii->nii->Id );
|
nii->undi = ( ( void * ) ( intptr_t ) nii->nii->Id );
|
||||||
|
if ( ! nii->undi ) {
|
||||||
|
DBGC ( nii, "NII %s has no UNDI\n", nii->dev.name );
|
||||||
|
rc = -ENODEV;
|
||||||
|
goto err_no_undi;
|
||||||
|
}
|
||||||
if ( nii->undi->Implementation & PXE_ROMID_IMP_HW_UNDI ) {
|
if ( nii->undi->Implementation & PXE_ROMID_IMP_HW_UNDI ) {
|
||||||
DBGC ( nii, "NII %s is a mythical hardware UNDI\n",
|
DBGC ( nii, "NII %s is a mythical hardware UNDI\n",
|
||||||
nii->dev.name );
|
nii->dev.name );
|
||||||
|
@ -1085,6 +1090,7 @@ static int nii_start ( struct efi_device *efidev ) {
|
||||||
nii_pci_close ( nii );
|
nii_pci_close ( nii );
|
||||||
err_pci_open:
|
err_pci_open:
|
||||||
err_hw_undi:
|
err_hw_undi:
|
||||||
|
err_no_undi:
|
||||||
bs->CloseProtocol ( device, &efi_nii31_protocol_guid,
|
bs->CloseProtocol ( device, &efi_nii31_protocol_guid,
|
||||||
efi_image_handle, device );
|
efi_image_handle, device );
|
||||||
err_open_protocol:
|
err_open_protocol:
|
||||||
|
|
Loading…
Reference in New Issue