OSDN Git Service

make_mac_path(): fix leaked file descriptor.
authorPeter Jones <pjones@redhat.com>
Mon, 1 May 2017 18:42:25 +0000 (14:42 -0400)
committerPeter Jones <pjones@redhat.com>
Mon, 1 May 2017 20:05:46 +0000 (16:05 -0400)
When make_mac_path() gets an error from efidp_make_mac_addr(), it fails
to close the file descriptor to the network device.  So close it.  Also
ensure that the ifrn_name field is NUL terminated.

Found by covscan.

Signed-off-by: Peter Jones <pjones@redhat.com>
src/linux.c

index 34ed479..3c77a93 100644 (file)
@@ -1035,6 +1035,7 @@ make_mac_path(uint8_t *buf, ssize_t size, const char * const ifname)
 
        memset(&ifr, 0, sizeof (ifr));
        strncpy(ifr.ifr_name, ifname, IF_NAMESIZE);
+       ifr.ifr_name[IF_NAMESIZE-1] = '\0';
        drvinfo.cmd = ETHTOOL_GDRVINFO;
        ifr.ifr_data = (caddr_t)&drvinfo;
 
@@ -1062,7 +1063,8 @@ make_mac_path(uint8_t *buf, ssize_t size, const char * const ifname)
                                 (uint8_t *)ifr.ifr_ifru.ifru_hwaddr.sa_data,
                                 sizeof(ifr.ifr_ifru.ifru_hwaddr.sa_data));
        if (sz < 0)
-               return -1;
+               goto err;
+
        off += sz;
        ret = off;
 err: