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
serial: sh-sci: Handle the general UPF_IOREMAP case.
[pandora-kernel.git]
/
fs
/
compat.c
diff --git
a/fs/compat.c
b/fs/compat.c
index
ed43e17
..
075d050
100644
(file)
--- a/
fs/compat.c
+++ b/
fs/compat.c
@@
-197,8
+197,8
@@
static int put_compat_statfs(struct compat_statfs __user *ubuf, struct kstatfs *
{
if (sizeof ubuf->f_blocks == 4) {
{
if (sizeof ubuf->f_blocks == 4) {
- if ((kbuf->f_blocks | kbuf->f_bfree | kbuf->f_bavail
) &
- 0xffffffff00000000ULL)
+ if ((kbuf->f_blocks | kbuf->f_bfree | kbuf->f_bavail
|
+
kbuf->f_bsize | kbuf->f_frsize) &
0xffffffff00000000ULL)
return -EOVERFLOW;
/* f_files and f_ffree may be -1; it's okay
* to stuff that into 32 bits */
return -EOVERFLOW;
/* f_files and f_ffree may be -1; it's okay
* to stuff that into 32 bits */
@@
-234,18
+234,18
@@
static int put_compat_statfs(struct compat_statfs __user *ubuf, struct kstatfs *
* The following statfs calls are copies of code from fs/open.c and
* should be checked against those from time to time
*/
* The following statfs calls are copies of code from fs/open.c and
* should be checked against those from time to time
*/
-asmlinkage long compat_sys_statfs(const char __user *path, struct compat_statfs __user *buf)
+asmlinkage long compat_sys_statfs(const char __user *path
name
, struct compat_statfs __user *buf)
{
{
- struct
nameidata nd
;
+ struct
path path
;
int error;
int error;
- error = user_path
_walk(path, &nd
);
+ error = user_path
(pathname, &path
);
if (!error) {
struct kstatfs tmp;
if (!error) {
struct kstatfs tmp;
- error = vfs_statfs(
nd.
path.dentry, &tmp);
+ error = vfs_statfs(path.dentry, &tmp);
if (!error)
error = put_compat_statfs(buf, &tmp);
if (!error)
error = put_compat_statfs(buf, &tmp);
- path_put(&
nd.
path);
+ path_put(&path);
}
return error;
}
}
return error;
}
@@
-271,8
+271,8
@@
out:
static int put_compat_statfs64(struct compat_statfs64 __user *ubuf, struct kstatfs *kbuf)
{
if (sizeof ubuf->f_blocks == 4) {
static int put_compat_statfs64(struct compat_statfs64 __user *ubuf, struct kstatfs *kbuf)
{
if (sizeof ubuf->f_blocks == 4) {
- if ((kbuf->f_blocks | kbuf->f_bfree | kbuf->f_bavail
) &
- 0xffffffff00000000ULL)
+ if ((kbuf->f_blocks | kbuf->f_bfree | kbuf->f_bavail
|
+
kbuf->f_bsize | kbuf->f_frsize) &
0xffffffff00000000ULL)
return -EOVERFLOW;
/* f_files and f_ffree may be -1; it's okay
* to stuff that into 32 bits */
return -EOVERFLOW;
/* f_files and f_ffree may be -1; it's okay
* to stuff that into 32 bits */
@@
-299,21
+299,21
@@
static int put_compat_statfs64(struct compat_statfs64 __user *ubuf, struct kstat
return 0;
}
return 0;
}
-asmlinkage long compat_sys_statfs64(const char __user *path, compat_size_t sz, struct compat_statfs64 __user *buf)
+asmlinkage long compat_sys_statfs64(const char __user *path
name
, compat_size_t sz, struct compat_statfs64 __user *buf)
{
{
- struct
nameidata nd
;
+ struct
path path
;
int error;
if (sz != sizeof(*buf))
return -EINVAL;
int error;
if (sz != sizeof(*buf))
return -EINVAL;
- error = user_path
_walk(path, &nd
);
+ error = user_path
(pathname, &path
);
if (!error) {
struct kstatfs tmp;
if (!error) {
struct kstatfs tmp;
- error = vfs_statfs(
nd.
path.dentry, &tmp);
+ error = vfs_statfs(path.dentry, &tmp);
if (!error)
error = put_compat_statfs64(buf, &tmp);
if (!error)
error = put_compat_statfs64(buf, &tmp);
- path_put(&
nd.
path);
+ path_put(&path);
}
return error;
}
}
return error;
}
@@
-792,8
+792,10
@@
static int compat_fillonedir(void *__buf, const char *name, int namlen,
if (buf->result)
return -EINVAL;
d_ino = ino;
if (buf->result)
return -EINVAL;
d_ino = ino;
- if (sizeof(d_ino) < sizeof(ino) && d_ino != ino)
+ if (sizeof(d_ino) < sizeof(ino) && d_ino != ino) {
+ buf->result = -EOVERFLOW;
return -EOVERFLOW;
return -EOVERFLOW;
+ }
buf->result++;
dirent = buf->dirent;
if (!access_ok(VERIFY_WRITE, dirent,
buf->result++;
dirent = buf->dirent;
if (!access_ok(VERIFY_WRITE, dirent,
@@
-862,8
+864,10
@@
static int compat_filldir(void *__buf, const char *name, int namlen,
if (reclen > buf->count)
return -EINVAL;
d_ino = ino;
if (reclen > buf->count)
return -EINVAL;
d_ino = ino;
- if (sizeof(d_ino) < sizeof(ino) && d_ino != ino)
+ if (sizeof(d_ino) < sizeof(ino) && d_ino != ino) {
+ buf->error = -EOVERFLOW;
return -EOVERFLOW;
return -EOVERFLOW;
+ }
dirent = buf->previous;
if (dirent) {
if (__put_user(offset, &dirent->d_off))
dirent = buf->previous;
if (dirent) {
if (__put_user(offset, &dirent->d_off))
@@
-2131,9
+2135,9
@@
asmlinkage long compat_sys_epoll_pwait(int epfd,
#ifdef CONFIG_SIGNALFD
#ifdef CONFIG_SIGNALFD
-asmlinkage long compat_sys_signalfd(int ufd,
- const compat_sigset_t __user *sigmask,
-
compat_size_t sigsetsize
)
+asmlinkage long compat_sys_signalfd
4
(int ufd,
+
const compat_sigset_t __user *sigmask,
+
compat_size_t sigsetsize, int flags
)
{
compat_sigset_t ss32;
sigset_t tmp;
{
compat_sigset_t ss32;
sigset_t tmp;
@@
-2148,9
+2152,15
@@
asmlinkage long compat_sys_signalfd(int ufd,
if (copy_to_user(ksigmask, &tmp, sizeof(sigset_t)))
return -EFAULT;
if (copy_to_user(ksigmask, &tmp, sizeof(sigset_t)))
return -EFAULT;
- return sys_signalfd
(ufd, ksigmask, sizeof(sigset_t)
);
+ return sys_signalfd
4(ufd, ksigmask, sizeof(sigset_t), flags
);
}
}
+asmlinkage long compat_sys_signalfd(int ufd,
+ const compat_sigset_t __user *sigmask,
+ compat_size_t sigsetsize)
+{
+ return compat_sys_signalfd4(ufd, sigmask, sigsetsize, 0);
+}
#endif /* CONFIG_SIGNALFD */
#ifdef CONFIG_TIMERFD
#endif /* CONFIG_SIGNALFD */
#ifdef CONFIG_TIMERFD