diff options
author | Michael Brown <mcb30@ipxe.org> | 2014-10-17 16:50:45 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2014-10-17 16:52:31 +0100 |
commit | feb3a0f7d56fd9fd342672069aa736660cea8089 (patch) | |
tree | 19be355847403f491ce51f1b96a5471c98e58b53 /src/drivers/net/efi | |
parent | 047baaba3819f9c98c1e253ba6d37dd5a20fd435 (diff) | |
download | ipxe-feb3a0f7d56fd9fd342672069aa736660cea8089.tar.gz |
[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>
Diffstat (limited to 'src/drivers/net/efi')
-rw-r--r-- | src/drivers/net/efi/nii.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/drivers/net/efi/nii.c b/src/drivers/net/efi/nii.c index 5b1872cab..56b6340bf 100644 --- a/src/drivers/net/efi/nii.c +++ b/src/drivers/net/efi/nii.c @@ -1037,6 +1037,11 @@ static int nii_start ( struct efi_device *efidev ) { /* Locate UNDI and entry point */ 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 ) { DBGC ( nii, "NII %s is a mythical hardware UNDI\n", nii->dev.name ); @@ -1085,6 +1090,7 @@ static int nii_start ( struct efi_device *efidev ) { nii_pci_close ( nii ); err_pci_open: err_hw_undi: + err_no_undi: bs->CloseProtocol ( device, &efi_nii31_protocol_guid, efi_image_handle, device ); err_open_protocol: |