Commit 4710d1ac authored by Thomas Tuttle's avatar Thomas Tuttle Committed by Linus Torvalds

pagemap: return EINVAL, not EIO, for unaligned reads of kpagecount or kpageflags

If the user tries to read from a position that is not a multiple of 8, or
read a number of bytes that is not a multiple of 8, they have passed an
invalid argument to read, for the purpose of reading these files.  It's
not an IO error because we didn't encounter any trouble finding the data
they asked for.
Signed-off-by: default avatarThomas Tuttle <ttuttle@google.com>
Cc: Matt Mackall <mpm@selenic.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent bbcdac0c
...@@ -716,7 +716,7 @@ static ssize_t kpagecount_read(struct file *file, char __user *buf, ...@@ -716,7 +716,7 @@ static ssize_t kpagecount_read(struct file *file, char __user *buf,
pfn = src / KPMSIZE; pfn = src / KPMSIZE;
count = min_t(size_t, count, (max_pfn * KPMSIZE) - src); count = min_t(size_t, count, (max_pfn * KPMSIZE) - src);
if (src & KPMMASK || count & KPMMASK) if (src & KPMMASK || count & KPMMASK)
return -EIO; return -EINVAL;
while (count > 0) { while (count > 0) {
ppage = NULL; ppage = NULL;
...@@ -782,7 +782,7 @@ static ssize_t kpageflags_read(struct file *file, char __user *buf, ...@@ -782,7 +782,7 @@ static ssize_t kpageflags_read(struct file *file, char __user *buf,
pfn = src / KPMSIZE; pfn = src / KPMSIZE;
count = min_t(unsigned long, count, (max_pfn * KPMSIZE) - src); count = min_t(unsigned long, count, (max_pfn * KPMSIZE) - src);
if (src & KPMMASK || count & KPMMASK) if (src & KPMMASK || count & KPMMASK)
return -EIO; return -EINVAL;
while (count > 0) { while (count > 0) {
ppage = NULL; ppage = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment