git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
[pandora-kernel.git]
/
arch
/
sparc64
/
kernel
/
sys_sunos32.c
diff --git
a/arch/sparc64/kernel/sys_sunos32.c
b/arch/sparc64/kernel/sys_sunos32.c
index
ae5b32f
..
7da72d3
100644
(file)
--- a/
arch/sparc64/kernel/sys_sunos32.c
+++ b/
arch/sparc64/kernel/sys_sunos32.c
@@
-43,6
+43,7
@@
#include <asm/idprom.h> /* for gethostid() */
#include <asm/unistd.h>
#include <asm/system.h>
#include <asm/idprom.h> /* for gethostid() */
#include <asm/unistd.h>
#include <asm/system.h>
+#include <asm/compat_signal.h>
/* For the nfs mount emulation */
#include <linux/socket.h>
/* For the nfs mount emulation */
#include <linux/socket.h>
@@
-155,7
+156,7
@@
asmlinkage int sunos_brk(u32 baddr)
* simple, it hopefully works in most obvious cases.. Easy to
* fool it, but this should catch most mistakes.
*/
* simple, it hopefully works in most obvious cases.. Easy to
* fool it, but this should catch most mistakes.
*/
- freepages = g
et_page_cache_size(
);
+ freepages = g
lobal_page_state(NR_FILE_PAGES
);
freepages >>= 1;
freepages += nr_free_pages();
freepages += nr_swap_pages;
freepages >>= 1;
freepages += nr_free_pages();
freepages += nr_swap_pages;
@@
-280,16
+281,20
@@
static int sunos_filldir(void * __buf, const char * name, int namlen,
struct sunos_dirent __user *dirent;
struct sunos_dirent_callback * buf = (struct sunos_dirent_callback *) __buf;
int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 1);
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;
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;
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))
put_user(namlen, &dirent->d_namlen);
put_user(reclen, &dirent->d_reclen);
if (copy_to_user(dirent->d_name, name, namlen))
@@
-363,14
+368,18
@@
static int sunos_filldirentry(void * __buf, const char * name, int namlen,
struct sunos_direntry_callback * buf =
(struct sunos_direntry_callback *) __buf;
int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 1);
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;
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;
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))
put_user(namlen, &dirent->d_namlen);
put_user(reclen, &dirent->d_reclen);
if (copy_to_user(dirent->d_name, name, namlen))
@@
-439,16
+448,16
@@
asmlinkage int sunos_uname(struct sunos_utsname __user *name)
int ret;
down_read(&uts_sem);
int ret;
down_read(&uts_sem);
- ret = copy_to_user(&name->sname[0], &
system_utsname.
sysname[0],
+ ret = copy_to_user(&name->sname[0], &
utsname()->
sysname[0],
sizeof(name->sname) - 1);
sizeof(name->sname) - 1);
- ret |= copy_to_user(&name->nname[0], &
system_utsname.
nodename[0],
+ ret |= copy_to_user(&name->nname[0], &
utsname()->
nodename[0],
sizeof(name->nname) - 1);
ret |= put_user('\0', &name->nname[8]);
sizeof(name->nname) - 1);
ret |= put_user('\0', &name->nname[8]);
- ret |= copy_to_user(&name->rel[0], &
system_utsname.
release[0],
+ ret |= copy_to_user(&name->rel[0], &
utsname()->
release[0],
sizeof(name->rel) - 1);
sizeof(name->rel) - 1);
- ret |= copy_to_user(&name->ver[0], &
system_utsname.
version[0],
+ ret |= copy_to_user(&name->ver[0], &
utsname()->
version[0],
sizeof(name->ver) - 1);
sizeof(name->ver) - 1);
- ret |= copy_to_user(&name->mach[0], &
system_utsname.
machine[0],
+ ret |= copy_to_user(&name->mach[0], &
utsname()->
machine[0],
sizeof(name->mach) - 1);
up_read(&uts_sem);
return (ret ? -EFAULT : 0);
sizeof(name->mach) - 1);
up_read(&uts_sem);
return (ret ? -EFAULT : 0);