提交 91bf189c 编写于 作者: R Roel Kluin 提交者: Linus Torvalds

hugetlb: unsigned ret cannot be negative

unsigned long ret cannot be negative, but ret can get -EFAULT.
Signed-off-by: NRoel Kluin <roel.kluin@gmail.com>
Cc: Hugh Dickins <hugh@veritas.com>
Cc: Christoph Lameter <clameter@sgi.com>
Cc: Adam Litke <agl@us.ibm.com>
Cc: David Gibson <david@gibson.dropbear.id.au>
Cc: Ken Chen <kenchen@google.com>
Cc: Nick Piggin <npiggin@suse.de>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 b555749a
...@@ -252,6 +252,7 @@ static ssize_t hugetlbfs_read(struct file *filp, char __user *buf, ...@@ -252,6 +252,7 @@ static ssize_t hugetlbfs_read(struct file *filp, char __user *buf,
for (;;) { for (;;) {
struct page *page; struct page *page;
unsigned long nr, ret; unsigned long nr, ret;
int ra;
/* nr is the maximum number of bytes to copy from this page */ /* nr is the maximum number of bytes to copy from this page */
nr = huge_page_size(h); nr = huge_page_size(h);
...@@ -274,16 +275,19 @@ static ssize_t hugetlbfs_read(struct file *filp, char __user *buf, ...@@ -274,16 +275,19 @@ static ssize_t hugetlbfs_read(struct file *filp, char __user *buf,
*/ */
ret = len < nr ? len : nr; ret = len < nr ? len : nr;
if (clear_user(buf, ret)) if (clear_user(buf, ret))
ret = -EFAULT; ra = -EFAULT;
else
ra = 0;
} else { } else {
/* /*
* We have the page, copy it to user space buffer. * We have the page, copy it to user space buffer.
*/ */
ret = hugetlbfs_read_actor(page, offset, buf, len, nr); ra = hugetlbfs_read_actor(page, offset, buf, len, nr);
ret = ra;
} }
if (ret < 0) { if (ra < 0) {
if (retval == 0) if (retval == 0)
retval = ret; retval = ra;
if (page) if (page)
page_cache_release(page); page_cache_release(page);
goto out; goto out;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册