Unified · Split
| @@ -885,23 +885,6 @@ struct file *open_exec(const char *name) · 884 unmodified lines | ||
| 885 | 885 | } |
| 886 | 886 | EXPORT_SYMBOL(open_exec); |
| 887 | 887 | |
| 888 | −int kernel_read(struct file *file, loff_t offset, | |
| 889 | − char *addr, unsigned long count) | |
| 890 | −{ | |
| 891 | − mm_segment_t old_fs; | |
| 892 | − loff_t pos = offset; | |
| 893 | − int result; | |
| 894 | − | |
| 895 | − old_fs = get_fs(); | |
| 896 | − set_fs(get_ds()); | |
| 897 | − /* The cast to a user pointer is valid due to the set_fs() */ | |
| 898 | − result = vfs_read(file, (void __user *)addr, count, &pos); | |
| 899 | − set_fs(old_fs); | |
| 900 | − return result; | |
| 901 | −} | |
| 902 | − | |
| 903 | −EXPORT_SYMBOL(kernel_read); | |
| 904 | − | |
| 905 | 888 | int kernel_read_file(struct file *file, void **buf, loff_t *size, |
| 906 | 889 | loff_t max_size, enum kernel_read_file_id id) |
| 907 | 890 | { |
| @@ -415,6 +415,22 @@ ssize_t __vfs_read(struct file *file, char __user *buf, size_t count, · 414 unmodified lines | ||
| 415 | 415 | } |
| 416 | 416 | EXPORT_SYMBOL(__vfs_read); |
| 417 | 417 | |
| 418 | +int kernel_read(struct file *file, loff_t offset, char *addr, | |
| 419 | + unsigned long count) | |
| 420 | +{ | |
| 421 | + mm_segment_t old_fs; | |
| 422 | + loff_t pos = offset; | |
| 423 | + int result; | |
| 424 | + | |
| 425 | + old_fs = get_fs(); | |
| 426 | + set_fs(get_ds()); | |
| 427 | + /* The cast to a user pointer is valid due to the set_fs() */ | |
| 428 | + result = vfs_read(file, (void __user *)addr, count, &pos); | |
| 429 | + set_fs(old_fs); | |
| 430 | + return result; | |
| 431 | +} | |
| 432 | +EXPORT_SYMBOL(kernel_read); | |
| 433 | + | |
| 418 | 434 | ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) |
| 419 | 435 | { |
| 420 | 436 | ssize_t ret; |