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 branch 'stable-3.2' into pandora-3.2
[pandora-kernel.git]
/
fs
/
autofs4
/
dev-ioctl.c
diff --git
a/fs/autofs4/dev-ioctl.c
b/fs/autofs4/dev-ioctl.c
index
509fe1e
..
ebedfb7
100644
(file)
--- a/
fs/autofs4/dev-ioctl.c
+++ b/
fs/autofs4/dev-ioctl.c
@@
-95,7
+95,7
@@
static int check_dev_ioctl_version(int cmd, struct autofs_dev_ioctl *param)
*/
static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *in)
{
*/
static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *in)
{
- struct autofs_dev_ioctl tmp;
+ struct autofs_dev_ioctl tmp
, *res
;
if (copy_from_user(&tmp, in, sizeof(tmp)))
return ERR_PTR(-EFAULT);
if (copy_from_user(&tmp, in, sizeof(tmp)))
return ERR_PTR(-EFAULT);
@@
-103,7
+103,14
@@
static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *i
if (tmp.size < sizeof(tmp))
return ERR_PTR(-EINVAL);
if (tmp.size < sizeof(tmp))
return ERR_PTR(-EINVAL);
- return memdup_user(in, tmp.size);
+ if (tmp.size > (PATH_MAX + sizeof(tmp)))
+ return ERR_PTR(-ENAMETOOLONG);
+
+ res = memdup_user(in, tmp.size);
+ if (!IS_ERR(res))
+ res->size = tmp.size;
+
+ return res;
}
static inline void free_dev_ioctl(struct autofs_dev_ioctl *param)
}
static inline void free_dev_ioctl(struct autofs_dev_ioctl *param)
@@
-230,7
+237,7
@@
static void autofs_dev_ioctl_fd_install(unsigned int fd, struct file *file)
fdt = files_fdtable(files);
BUG_ON(fdt->fd[fd] != NULL);
rcu_assign_pointer(fdt->fd[fd], file);
fdt = files_fdtable(files);
BUG_ON(fdt->fd[fd] != NULL);
rcu_assign_pointer(fdt->fd[fd], file);
-
FD_SET(fd, fdt->close_on_exec
);
+
__set_close_on_exec(fd, fdt
);
spin_unlock(&files->file_lock);
}
spin_unlock(&files->file_lock);
}
@@
-338,7
+345,7
@@
static int autofs_dev_ioctl_fail(struct file *fp,
int status;
token = (autofs_wqt_t) param->fail.token;
int status;
token = (autofs_wqt_t) param->fail.token;
- status = param->fail.status ? param->fail.status : -ENOENT;
+ status = param->fail.status
< 0
? param->fail.status : -ENOENT;
return autofs4_wait_release(sbi, token, status);
}
return autofs4_wait_release(sbi, token, status);
}
@@
-376,7
+383,7
@@
static int autofs_dev_ioctl_setpipefd(struct file *fp,
err = -EBADF;
goto out;
}
err = -EBADF;
goto out;
}
- if (
!pipe->f_op || !pipe->f_op->write
) {
+ if (
autofs_prepare_pipe(pipe) < 0
) {
err = -EPIPE;
fput(pipe);
goto out;
err = -EPIPE;
fput(pipe);
goto out;