netdev-linux: Avoid potential issues with unset FD.
authorJesse Gross <jesse@nicira.com>
Sat, 16 Jan 2010 00:24:53 +0000 (19:24 -0500)
committerJesse Gross <jesse@nicira.com>
Mon, 18 Jan 2010 23:23:14 +0000 (18:23 -0500)
Never close the file descriptor if it is 0, since it is never a
valid FD in this context.  Also initialize the FD to -1 so that
it is never set to a valid but incorrect value.

lib/netdev-linux.c

index 85ef62a39a3fcf5657a0234b6be2f36f584bacba..f2a6a5d045adaab7a0063a402142e24ed79304d7 100644 (file)
@@ -812,6 +812,7 @@ netdev_linux_open(struct netdev_dev *netdev_dev_, int ethertype,
 
     /* Allocate network device. */
     netdev = xzalloc(sizeof *netdev);
+    netdev->fd = -1;
     netdev_init(&netdev->netdev, netdev_dev_);
 
     error = netdev_get_flags(&netdev->netdev, &flags);
@@ -868,8 +869,6 @@ netdev_linux_open(struct netdev_dev *netdev_dev_, int ethertype,
         if (error) {
             goto error;
         }
-    } else {
-        netdev->fd = -1;
     }
 
     *netdevp = &netdev->netdev;
@@ -886,7 +885,7 @@ netdev_linux_close(struct netdev *netdev_)
 {
     struct netdev_linux *netdev = netdev_linux_cast(netdev_);
 
-    if (netdev->fd >= 0 && strcmp(netdev_get_type(netdev_), "tap")) {
+    if (netdev->fd > 0 && strcmp(netdev_get_type(netdev_), "tap")) {
         close(netdev->fd);
     }
     free(netdev);