diff options
Diffstat (limited to 'fs/binfmt_misc.c')
| -rw-r--r-- | fs/binfmt_misc.c | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c index 7191306367c5..756205314c24 100644 --- a/fs/binfmt_misc.c +++ b/fs/binfmt_misc.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/namei.h> | 27 | #include <linux/namei.h> |
| 28 | #include <linux/mount.h> | 28 | #include <linux/mount.h> |
| 29 | #include <linux/syscalls.h> | 29 | #include <linux/syscalls.h> |
| 30 | #include <linux/fs.h> | ||
| 30 | 31 | ||
| 31 | #include <asm/uaccess.h> | 32 | #include <asm/uaccess.h> |
| 32 | 33 | ||
| @@ -535,31 +536,16 @@ static ssize_t | |||
| 535 | bm_entry_read(struct file * file, char __user * buf, size_t nbytes, loff_t *ppos) | 536 | bm_entry_read(struct file * file, char __user * buf, size_t nbytes, loff_t *ppos) |
| 536 | { | 537 | { |
| 537 | Node *e = file->f_path.dentry->d_inode->i_private; | 538 | Node *e = file->f_path.dentry->d_inode->i_private; |
| 538 | loff_t pos = *ppos; | ||
| 539 | ssize_t res; | 539 | ssize_t res; |
| 540 | char *page; | 540 | char *page; |
| 541 | int len; | ||
| 542 | 541 | ||
| 543 | if (!(page = (char*) __get_free_page(GFP_KERNEL))) | 542 | if (!(page = (char*) __get_free_page(GFP_KERNEL))) |
| 544 | return -ENOMEM; | 543 | return -ENOMEM; |
| 545 | 544 | ||
| 546 | entry_status(e, page); | 545 | entry_status(e, page); |
| 547 | len = strlen(page); | ||
| 548 | 546 | ||
| 549 | res = -EINVAL; | 547 | res = simple_read_from_buffer(buf, nbytes, ppos, page, strlen(page)); |
| 550 | if (pos < 0) | 548 | |
| 551 | goto out; | ||
| 552 | res = 0; | ||
| 553 | if (pos >= len) | ||
| 554 | goto out; | ||
| 555 | if (len < pos + nbytes) | ||
| 556 | nbytes = len - pos; | ||
| 557 | res = -EFAULT; | ||
| 558 | if (copy_to_user(buf, page + pos, nbytes)) | ||
| 559 | goto out; | ||
| 560 | *ppos = pos + nbytes; | ||
| 561 | res = nbytes; | ||
| 562 | out: | ||
| 563 | free_page((unsigned long) page); | 549 | free_page((unsigned long) page); |
| 564 | return res; | 550 | return res; |
| 565 | } | 551 | } |
