aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miklos Szeredi <miklos@szeredi.hu>2007-01-19 22:11:40 +0000
committerGravatar Miklos Szeredi <miklos@szeredi.hu>2007-01-19 22:11:40 +0000
commit6e7d018049193efe9d092bb91c4416a332f28278 (patch)
tree1682fdb3dc3d9ca6012e3e4813b6203401ec6d0c
parent7dcdf1bf5b4c9fe36bf6fdf98149154a3216f059 (diff)
merge up to fuse_2_6_merge1
-rw-r--r--ChangeLog26
-rw-r--r--kernel/file.c6
-rw-r--r--kernel/fuse_i.h6
-rw-r--r--lib/fuse.c7
-rw-r--r--lib/mount.c2
-rw-r--r--lib/ulockmgr.c2
-rw-r--r--util/fusermount.c4
-rw-r--r--util/ulockmgr_server.c2
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 <miklos@szeredi.hu>
+2007-01-19 Miklos Szeredi <miklos@szeredi.hu>
+
+ * Build fix for 2.6.16 vanila and 2.6.15 FC5 kernels. Patch from
+ Ian Abbott
+
+2007-01-18 Miklos Szeredi <miklos@szeredi.hu>
+
+ * Fix abort in fuse_new() compatibility API for opts == NULL case.
+ Novell bugzilla #233870. Patch from Takashi Iwai.
+
+2007-01-13 Miklos Szeredi <miklos@szeredi.hu>
* Fix option parsing in mount.fuse. Patch from Jens M. Noedler
+2007-01-02 Miklos Szeredi <miklos@szeredi.hu>
+
+ * 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 <miklos@szeredi.hu>
* kernel: don't keep unreferenced inodes in the icache.
+2006-12-15 Miklos Szeredi <miklos@szeredi.hu>
+
+ * 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 <miklos@szeredi.hu>
* 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 <linux/spinlock.h>
#include <linux/mm.h>
#include <linux/backing-dev.h>
-#ifdef KERNEL_2_6_17_PLUS
-#include <linux/mutex.h>
-#else
-#include <asm/semaphore.h>
+#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;