diff options
author | Andrey Vagin <avagin@openvz.org> | 2013-06-04 12:01:14 +0400 |
---|---|---|
committer | Stephen Hemminger <stephen@networkplumber.org> | 2013-06-04 09:11:06 -0700 |
commit | bcb9d403196944d12b7ec095d66a805ea786fd2e (patch) | |
tree | bbe5ebc944a3892baa93dd148511eb41f67cd0df | |
parent | c083d99dd3825e2f7a66d3e4717ed3fc6c42f351 (diff) |
ip: set the close-on-exec flag for descriptors
Otherwise a program executed by "ip netns exec" has two extra
descriptors.
$ ip netns exec test /bin/bash
$ lsof -p $$
...
bash 817 root 0u CHR 136,0 0t0 3 /dev/pts/0
bash 817 root 1u CHR 136,0 0t0 3 /dev/pts/0
bash 817 root 2u CHR 136,0 0t0 3 /dev/pts/0
bash 817 root 3u sock 0,6 0t0 13386 protocol: NETLINK
bash 817 root 4r REG 0,3 0 4026532155 net
bash 817 root 255u CHR 136,0 0t0 3 /dev/pts/0
Cc: Stephen Hemminger <stephen@networkplumber.org>
Reported-by: Dilip Daya <dilip.daya@hp.com>
Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Andrey Vagin <avagin@openvz.org>
-rw-r--r-- | ip/ipnetns.c | 2 | ||||
-rw-r--r-- | lib/libnetlink.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/ip/ipnetns.c b/ip/ipnetns.c index c9bc20ae..fa2b6810 100644 --- a/ip/ipnetns.c +++ b/ip/ipnetns.c @@ -150,7 +150,7 @@ static int netns_exec(int argc, char **argv) name = argv[0]; cmd = argv[1]; snprintf(net_path, sizeof(net_path), "%s/%s", NETNS_RUN_DIR, name); - netns = open(net_path, O_RDONLY); + netns = open(net_path, O_RDONLY | O_CLOEXEC); if (netns < 0) { fprintf(stderr, "Cannot open network namespace \"%s\": %s\n", name, strerror(errno)); diff --git a/lib/libnetlink.c b/lib/libnetlink.c index b17e1aae..9e2a7958 100644 --- a/lib/libnetlink.c +++ b/lib/libnetlink.c @@ -43,7 +43,7 @@ int rtnl_open_byproto(struct rtnl_handle *rth, unsigned subscriptions, memset(rth, 0, sizeof(*rth)); - rth->fd = socket(AF_NETLINK, SOCK_RAW, protocol); + rth->fd = socket(AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, protocol); if (rth->fd < 0) { perror("Cannot open netlink socket"); return -1; |