netdev-linux: Don't close(0) when closing an ordinary netdev.
authorBen Pfaff <blp@nicira.com>
Fri, 15 Jan 2010 22:06:15 +0000 (14:06 -0800)
committerBen Pfaff <blp@nicira.com>
Fri, 15 Jan 2010 23:35:38 +0000 (15:35 -0800)
commit88258e0034cc7ca6ffde0974f1fb92d26289ad6a
treef1cff1693817e85d2ff5cdb4b33c8f03fdaf8fea
parentf3ac83df5c4fec3f27a9c8f95ef2753a26c65d24
netdev-linux: Don't close(0) when closing an ordinary netdev.

Calling close(0) at random points is bad.  It means that the next call to
socket() or open() returns fd 0.  Then the next time a netdev gets closed,
that socket or file fd gets closed too, and you end up with weird "Bad
file descriptor" errors.

Found by installing the following as lib/unistd.h in the source tree:

#ifndef UNISTD_H
#define UNISTD_H 1

#include <stdlib.h>
#include_next <unistd.h>

#undef close
#define close(fd) rpl_close(fd)

static inline int rpl_close(int fd)
{
    if (!fd) {
        abort();
    }
    return (close)(fd);
}

#endif
lib/netdev-linux.c