Merge branch 'work.set_fs' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[sfrench/cifs-2.6.git] / fs / exec.c
index daa19d85c066bfbf00a1ce27bfb4de22aa10e466..69a543259aa527033010f8ff347f7c26084e0db2 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -885,23 +885,6 @@ struct file *open_exec(const char *name)
 }
 EXPORT_SYMBOL(open_exec);
 
-int kernel_read(struct file *file, loff_t offset,
-               char *addr, unsigned long count)
-{
-       mm_segment_t old_fs;
-       loff_t pos = offset;
-       int result;
-
-       old_fs = get_fs();
-       set_fs(get_ds());
-       /* The cast to a user pointer is valid due to the set_fs() */
-       result = vfs_read(file, (void __user *)addr, count, &pos);
-       set_fs(old_fs);
-       return result;
-}
-
-EXPORT_SYMBOL(kernel_read);
-
 int kernel_read_file(struct file *file, void **buf, loff_t *size,
                     loff_t max_size, enum kernel_read_file_id id)
 {
@@ -939,8 +922,7 @@ int kernel_read_file(struct file *file, void **buf, loff_t *size,
 
        pos = 0;
        while (pos < i_size) {
-               bytes = kernel_read(file, pos, (char *)(*buf) + pos,
-                                   i_size - pos);
+               bytes = kernel_read(file, *buf + pos, i_size - pos, &pos);
                if (bytes < 0) {
                        ret = bytes;
                        goto out;
@@ -948,7 +930,6 @@ int kernel_read_file(struct file *file, void **buf, loff_t *size,
 
                if (bytes == 0)
                        break;
-               pos += bytes;
        }
 
        if (pos != i_size) {
@@ -1567,6 +1548,7 @@ static void bprm_fill_uid(struct linux_binprm *bprm)
 int prepare_binprm(struct linux_binprm *bprm)
 {
        int retval;
+       loff_t pos = 0;
 
        bprm_fill_uid(bprm);
 
@@ -1577,7 +1559,7 @@ int prepare_binprm(struct linux_binprm *bprm)
        bprm->called_set_creds = 1;
 
        memset(bprm->buf, 0, BINPRM_BUF_SIZE);
-       return kernel_read(bprm->file, 0, bprm->buf, BINPRM_BUF_SIZE);
+       return kernel_read(bprm->file, bprm->buf, BINPRM_BUF_SIZE, &pos);
 }
 
 EXPORT_SYMBOL(prepare_binprm);