From bba1ff4cf64a095d9b6c193e8a5d19da3f6e1a16 Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Thu, 18 Feb 2010 11:05:13 +0000 Subject: [PATCH] * Fix stack alignment for clone() --- ChangeLog | 4 ++++ include/fuse_lowlevel.h | 1 + util/fusermount.c | 9 ++++----- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index fdb281d..c4a949b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2010-02-03 Miklos Szeredi + + * Fix stack alignment for clone() + 2010-02-01 Miklos Szeredi * Released 2.8.3 diff --git a/include/fuse_lowlevel.h b/include/fuse_lowlevel.h index 8c04cd4..2855e51 100644 --- a/include/fuse_lowlevel.h +++ b/include/fuse_lowlevel.h @@ -411,6 +411,7 @@ struct fuse_lowlevel_ops { * * Valid replies: * fuse_reply_buf + * fuse_reply_iov * fuse_reply_err * * @param req request handle diff --git a/util/fusermount.c b/util/fusermount.c index f0d8732..6123c66 100644 --- a/util/fusermount.c +++ b/util/fusermount.c @@ -262,9 +262,8 @@ static int check_is_mount_child(void *p) static pid_t clone_newns(void *a) { - long long buf[16384]; - size_t stacksize = sizeof(buf) / 2; - char *stack = ((char *) buf) + stacksize; + char buf[131072]; + char *stack = buf + (sizeof(buf) / 2 - ((size_t) buf & 15)); #ifdef __ia64__ extern int __clone2(int (*fn)(void *), @@ -272,8 +271,8 @@ static pid_t clone_newns(void *a) int flags, void *arg, pid_t *ptid, void *tls, pid_t *ctid); - return __clone2(check_is_mount_child, stack, stacksize, CLONE_NEWNS, a, - NULL, NULL, NULL); + return __clone2(check_is_mount_child, stack, sizeof(buf) / 2, + CLONE_NEWNS, a, NULL, NULL, NULL); #else return clone(check_is_mount_child, stack, CLONE_NEWNS, a); #endif -- 2.30.2