summaryrefslogtreecommitdiff
path: root/fs/sysfs/bin.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2009-01-20 15:51:16 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2009-02-02 08:28:07 -0800
commit2085509e2715178a54cf23dc63f87cb2c58f3bf4 (patch)
treea597e2c8263005a4557ff30604c76892403cd9ad /fs/sysfs/bin.c
parent803f9eb9987e92e1b4c382c33892ec623d821d1d (diff)
downloadlwn-2085509e2715178a54cf23dc63f87cb2c58f3bf4.tar.gz
lwn-2085509e2715178a54cf23dc63f87cb2c58f3bf4.zip
sysfs: fix problems with binary files
commit 4503efd0891c40e30928afb4b23dc3f99c62a6b2 upstream. Some sysfs binary files don't like having 0 passed to them as a size. Fix this up at the root by just returning to the vfs if userspace asks us for a zero sized buffer. Thanks to Pavel Roskin for pointing this out. Reported-by: Pavel Roskin <proski@gnu.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs/sysfs/bin.c')
-rw-r--r--fs/sysfs/bin.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/sysfs/bin.c b/fs/sysfs/bin.c
index 006fc64227dd..aa244842f30b 100644
--- a/fs/sysfs/bin.c
+++ b/fs/sysfs/bin.c
@@ -62,6 +62,9 @@ read(struct file *file, char __user *userbuf, size_t bytes, loff_t *off)
loff_t offs = *off;
int count = min_t(size_t, bytes, PAGE_SIZE);
+ if (!bytes)
+ return 0;
+
if (size) {
if (offs > size)
return 0;
@@ -119,6 +122,9 @@ static ssize_t write(struct file *file, const char __user *userbuf,
loff_t offs = *off;
int count = min_t(size_t, bytes, PAGE_SIZE);
+ if (!bytes)
+ return 0;
+
if (size) {
if (offs > size)
return 0;