From: Linus Torvalds Date: Tue, 3 Oct 2006 15:53:26 +0000 (-0700) Subject: Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6 X-Git-Tag: v2.6.19-rc1~218 X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=commitdiff_plain;h=65fc471343acbab05e2e24ad9688af43a37d6a1b;hp=-c Merge /pub/scm/linux/kernel/git/davem/sparc-2.6 * master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6: [SPARC64]: Update defconfig. [SPARC64]: Do not include compat.h from asm-sparc64/signal.h any more. [SPARC64]: Move signal compat bits to new header file. --- 65fc471343acbab05e2e24ad9688af43a37d6a1b diff --combined arch/sparc64/kernel/sys_sparc32.c index dbc6d1a3be1f,7c6499ce1767..e27cb71bd8e2 --- a/arch/sparc64/kernel/sys_sparc32.c +++ b/arch/sparc64/kernel/sys_sparc32.c @@@ -61,6 -61,7 +61,7 @@@ #include #include #include + #include asmlinkage long sys32_chown16(const char __user * filename, u16 user, u16 group) { @@@ -337,17 -338,12 +338,17 @@@ asmlinkage long sys32_ftruncate64(unsig int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf) { + compat_ino_t ino; int err; if (stat->size > MAX_NON_LFS || !old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev)) return -EOVERFLOW; + ino = stat->ino; + if (sizeof(ino) < sizeof(stat->ino) && ino != stat->ino) + return -EOVERFLOW; + err = put_user(old_encode_dev(stat->dev), &statbuf->st_dev); err |= put_user(stat->ino, &statbuf->st_ino); err |= put_user(stat->mode, &statbuf->st_mode); diff --combined arch/sparc64/kernel/sys_sunos32.c index e414c8ef0225,b21e8dd41a66..7da72d3b322a --- a/arch/sparc64/kernel/sys_sunos32.c +++ b/arch/sparc64/kernel/sys_sunos32.c @@@ -43,6 -43,7 +43,7 @@@ #include /* for gethostid() */ #include #include + #include /* For the nfs mount emulation */ #include @@@ -280,20 -281,16 +281,20 @@@ static int sunos_filldir(void * __buf, struct sunos_dirent __user *dirent; struct sunos_dirent_callback * buf = (struct sunos_dirent_callback *) __buf; int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 1); + u32 d_ino; buf->error = -EINVAL; /* only used if we fail.. */ if (reclen > buf->count) return -EINVAL; + d_ino = ino; + if (sizeof(d_ino) < sizeof(ino) && d_ino != ino) + return -EOVERFLOW; dirent = buf->previous; if (dirent) put_user(offset, &dirent->d_off); dirent = buf->curr; buf->previous = dirent; - put_user(ino, &dirent->d_ino); + put_user(d_ino, &dirent->d_ino); put_user(namlen, &dirent->d_namlen); put_user(reclen, &dirent->d_reclen); if (copy_to_user(dirent->d_name, name, namlen)) @@@ -367,18 -364,14 +368,18 @@@ static int sunos_filldirentry(void * __ struct sunos_direntry_callback * buf = (struct sunos_direntry_callback *) __buf; int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 1); + u32 d_ino; buf->error = -EINVAL; /* only used if we fail.. */ if (reclen > buf->count) return -EINVAL; + d_ino = ino; + if (sizeof(d_ino) < sizeof(ino) && d_ino != ino) + return -EOVERFLOW; dirent = buf->previous; dirent = buf->curr; buf->previous = dirent; - put_user(ino, &dirent->d_ino); + put_user(d_ino, &dirent->d_ino); put_user(namlen, &dirent->d_namlen); put_user(reclen, &dirent->d_reclen); if (copy_to_user(dirent->d_name, name, namlen))