Author: jhb
Date: Thu May 26 23:08:57 2016
New Revision: 300791
URL: https://svnweb.freebsd.org/changeset/base/300791

Log:
  Use a unique error message if we fail to find the simple network protocol.
  
  While here, fix the various net driver callbacks to return early instead
  of crashing if this fails.  (The 'init' callback from the netif interface
  doesn't return an error if the protocol lookup fails.)
  
  Sponsored by: Cisco Systems

Modified:
  head/sys/boot/efi/libefi/efinet.c

Modified: head/sys/boot/efi/libefi/efinet.c
==============================================================================
--- head/sys/boot/efi/libefi/efinet.c   Thu May 26 23:07:20 2016        
(r300790)
+++ head/sys/boot/efi/libefi/efinet.c   Thu May 26 23:08:57 2016        
(r300791)
@@ -122,6 +122,8 @@ efinet_put(struct iodesc *desc, void *pk
        void *buf;
 
        net = nif->nif_devdata;
+       if (net == NULL)
+               return (-1);
 
        status = net->Transmit(net, 0, len, pkt, 0, 0, 0);
        if (status != EFI_SUCCESS)
@@ -152,6 +154,8 @@ efinet_get(struct iodesc *desc, void *pk
        char buf[2048];
 
        net = nif->nif_devdata;
+       if (net == NULL)
+               return (0);
 
        t = time(0);
        while ((time(0) - t) < timeout) {
@@ -192,7 +196,7 @@ efinet_init(struct iodesc *desc, void *m
        h = nif->nif_driver->netif_ifs[nif->nif_unit].dif_private;
        status = BS->HandleProtocol(h, &sn_guid, (VOID **)&nif->nif_devdata);
        if (status != EFI_SUCCESS) {
-               printf("net%d: cannot start interface (status=%lu)\n",
+               printf("net%d: cannot fetch interface data (status=%lu)\n",
                    nif->nif_unit, EFI_ERROR_CODE(status));
                return;
        }
@@ -241,6 +245,9 @@ efinet_end(struct netif *nif)
 {
        EFI_SIMPLE_NETWORK *net = nif->nif_devdata; 
 
+       if (net == NULL)
+               return;
+
        net->Shutdown(net);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to