From 4a6fb6768aada05e456b2e8cbbcf5660637564ce Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 2 Apr 2012 19:04:02 +0100 Subject: [PATCH] libfuse: use O_CLOEXEC flag when opening /dev/fuse device --- ChangeLog | 3 +++ lib/mount.c | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 508ae46..511c694 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,9 @@ * libfuse: change the type of fuse_ino_t from 'unsigned long' to 'uint64_t' + * libfuse: use O_CLOEXEC flag when opening /dev/fuse device. + Patch by Richard W.M. Jones + 2013-02-19 Miklos Szeredi * fuse_daemonize(): chdir to "/" even if not running in the diff --git a/lib/mount.c b/lib/mount.c index 01f64da..4f74841 100644 --- a/lib/mount.c +++ b/lib/mount.c @@ -406,6 +406,10 @@ static int fuse_mount_fusermount(const char *mountpoint, struct mount_opts *mo, return rv; } +#ifndef O_CLOEXEC +#define O_CLOEXEC 0 +#endif + static int fuse_mount_sys(const char *mnt, struct mount_opts *mo, const char *mnt_opts) { @@ -442,7 +446,7 @@ static int fuse_mount_sys(const char *mnt, struct mount_opts *mo, return -2; } - fd = open(devname, O_RDWR); + fd = open(devname, O_RDWR | O_CLOEXEC); if (fd == -1) { if (errno == ENODEV || errno == ENOENT) fprintf(stderr, "fuse: device not found, try 'modprobe fuse' first\n"); @@ -451,6 +455,8 @@ static int fuse_mount_sys(const char *mnt, struct mount_opts *mo, devname, strerror(errno)); return -1; } + if (!O_CLOEXEC) + fcntl(fd, F_SETFD, FD_CLOEXEC); snprintf(tmp, sizeof(tmp), "fd=%i,rootmode=%o,user_id=%i,group_id=%i", fd, stbuf.st_mode & S_IFMT, getuid(), getgid()); -- 2.30.2