diff options
Diffstat (limited to 'fs/exec.c')
| -rw-r--r-- | fs/exec.c | 24 | 
1 files changed, 3 insertions, 21 deletions
diff --git a/fs/exec.c b/fs/exec.c index daa19d85c066..69a543259aa5 100644 --- 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);  | 
