diff options
Diffstat (limited to 'fs/exec.c')
-rw-r--r-- | fs/exec.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/fs/exec.c b/fs/exec.c index 1138dc502c77..64cb3bc788c1 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -884,6 +884,25 @@ out: } EXPORT_SYMBOL_GPL(kernel_read_file); +int kernel_read_file_from_path(char *path, void **buf, loff_t *size, + loff_t max_size, enum kernel_read_file_id id) +{ + struct file *file; + int ret; + + if (!path || !*path) + return -EINVAL; + + file = filp_open(path, O_RDONLY, 0); + if (IS_ERR(file)) + return PTR_ERR(file); + + ret = kernel_read_file(file, buf, size, max_size, id); + fput(file); + return ret; +} +EXPORT_SYMBOL_GPL(kernel_read_file_from_path); + ssize_t read_code(struct file *file, unsigned long addr, loff_t pos, size_t len) { ssize_t res = vfs_read(file, (void __user *)addr, len, &pos); |