From 6e7d018049193efe9d092bb91c4416a332f28278 Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Fri, 19 Jan 2007 22:11:40 +0000 Subject: [PATCH] merge up to fuse_2_6_merge1 --- ChangeLog | 26 +++++++++++++++++++++++++- kernel/file.c | 6 ------ kernel/fuse_i.h | 6 ++---- lib/fuse.c | 7 ++++--- lib/mount.c | 2 +- lib/ulockmgr.c | 2 +- util/fusermount.c | 4 ++-- util/ulockmgr_server.c | 2 +- 8 files changed, 36 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 350e575..37c54d6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,35 @@ -2006-01-13 Miklos Szeredi +2007-01-19 Miklos Szeredi + + * Build fix for 2.6.16 vanila and 2.6.15 FC5 kernels. Patch from + Ian Abbott + +2007-01-18 Miklos Szeredi + + * Fix abort in fuse_new() compatibility API for opts == NULL case. + Novell bugzilla #233870. Patch from Takashi Iwai. + +2007-01-13 Miklos Szeredi * Fix option parsing in mount.fuse. Patch from Jens M. Noedler +2007-01-02 Miklos Szeredi + + * Fix unaligned access in file desctriptor passing in libfuse, + fusermount and ulockmgr. Debian bug ID: 404904. Reported and + tested by Sebastian Fontius + 2006-12-16 Miklos Szeredi * kernel: don't keep unreferenced inodes in the icache. +2006-12-15 Miklos Szeredi + + * fusermount: Fix detection of fuseblk. Reported by Szakacsits + Szabolcs + + * lib: Fix use after free in fuse_flush(). Reported by Ron + Lindman + 2006-12-10 Miklos Szeredi * mount.fuse: add "setuid=USER" option which does a "su - USER" diff --git a/kernel/file.c b/kernel/file.c index 6cf71f3..3006d02 100644 --- a/kernel/file.c +++ b/kernel/file.c @@ -628,15 +628,9 @@ static ssize_t fuse_direct_write(struct file *file, const char __user *buf, struct inode *inode = file->f_dentry->d_inode; ssize_t res; /* Don't allow parallel writes to the same file */ -#ifdef KERNEL_2_6_16_PLUS mutex_lock(&inode->i_mutex); res = fuse_direct_io(file, buf, count, ppos, 1); mutex_unlock(&inode->i_mutex); -#else - down(&inode->i_sem); - res = fuse_direct_io(file, buf, count, ppos, 1); - up(&inode->i_sem); -#endif return res; } diff --git a/kernel/fuse_i.h b/kernel/fuse_i.h index f5b26f2..5259ee1 100644 --- a/kernel/fuse_i.h +++ b/kernel/fuse_i.h @@ -55,16 +55,14 @@ #include #include #include -#ifdef KERNEL_2_6_17_PLUS -#include -#else -#include +#ifndef DEFINE_MUTEX #define DEFINE_MUTEX(m) DECLARE_MUTEX(m) #define mutex_init(m) init_MUTEX(m) #define mutex_destroy(m) do { } while (0) #define mutex_lock(m) down(m) #define mutex_unlock(m) up(m) #define mutex semaphore +#define i_mutex i_sem /* Hack for struct inode */ #endif #ifndef KERNEL_2_6_19_PLUS #define clear_nlink(inode) (inode)->i_nlink = 0 diff --git a/lib/fuse.c b/lib/fuse.c index 4446245..994a31f 100644 --- a/lib/fuse.c +++ b/lib/fuse.c @@ -2295,7 +2295,6 @@ static void fuse_flush(fuse_req_t req, fuse_ino_t ino, err = -ENOSYS; if (f->op.flush) err = fuse_do_flush(f, req, path, fi); - free(path); } if (f->op.lock) { struct flock lock; @@ -2314,6 +2313,7 @@ static void fuse_flush(fuse_req_t req, fuse_ino_t ino, if (err == -ENOSYS) err = 0; } + free(path); pthread_rwlock_unlock(&f->tree_lock); reply_err(req, err); } @@ -2948,9 +2948,10 @@ static struct fuse *fuse_new_common_compat(int fd, const char *opts, struct fuse *f; struct fuse_args args = FUSE_ARGS_INIT(0, NULL); + if (fuse_opt_add_arg(&args, "") == -1) + return NULL; if (opts && - (fuse_opt_add_arg(&args, "") == -1 || - fuse_opt_add_arg(&args, "-o") == -1 || + (fuse_opt_add_arg(&args, "-o") == -1 || fuse_opt_add_arg(&args, opts) == -1)) { fuse_opt_free_args(&args); return NULL; diff --git a/lib/mount.c b/lib/mount.c index a72294b..cbdedf3 100644 --- a/lib/mount.c +++ b/lib/mount.c @@ -151,7 +151,7 @@ static int receive_fd(int fd) struct iovec iov; char buf[1]; int rv; - char ccmsg[CMSG_SPACE(sizeof(int))]; + size_t ccmsg[CMSG_SPACE(sizeof(int)) / sizeof(size_t)]; struct cmsghdr *cmsg; iov.iov_base = buf; diff --git a/lib/ulockmgr.c b/lib/ulockmgr.c index 9e9c2b6..bf27b36 100644 --- a/lib/ulockmgr.c +++ b/lib/ulockmgr.c @@ -75,7 +75,7 @@ static int ulockmgr_send_message(int sock, void *buf, size_t buflen, struct msghdr msg; struct cmsghdr *p_cmsg; struct iovec vec; - char cmsgbuf[CMSG_SPACE(sizeof(int) * MAX_SEND_FDS)]; + size_t cmsgbuf[CMSG_SPACE(sizeof(int) * MAX_SEND_FDS) / sizeof(size_t)]; int res; assert(numfds <= MAX_SEND_FDS); diff --git a/util/fusermount.c b/util/fusermount.c index 47f335c..70903a0 100644 --- a/util/fusermount.c +++ b/util/fusermount.c @@ -437,7 +437,7 @@ static int has_fuseblk(void) return 1; while (fgets(buf, sizeof(buf), f)) - if (strcmp(buf, "fuseblk\n") == 0) { + if (strstr(buf, "fuseblk\n")) { fclose(f); return 1; } @@ -883,7 +883,7 @@ static int send_fd(int sock_fd, int fd) struct msghdr msg; struct cmsghdr *p_cmsg; struct iovec vec; - char cmsgbuf[CMSG_SPACE(sizeof(fd))]; + size_t cmsgbuf[CMSG_SPACE(sizeof(fd)) / sizeof(size_t)]; int *p_fds; char sendchar = 0; diff --git a/util/ulockmgr_server.c b/util/ulockmgr_server.c index 0d00975..211d74a 100644 --- a/util/ulockmgr_server.c +++ b/util/ulockmgr_server.c @@ -58,7 +58,7 @@ static int receive_message(int sock, void *buf, size_t buflen, int *fdp, { struct msghdr msg; struct iovec iov; - char ccmsg[CMSG_SPACE(sizeof(int)) * MAX_SEND_FDS]; + size_t ccmsg[CMSG_SPACE(sizeof(int) * MAX_SEND_FDS) / sizeof(size_t)]; struct cmsghdr *cmsg; int res; int i; -- 2.30.2