diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2009-01-20 15:51:16 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-02-02 08:28:07 -0800 |
commit | 2085509e2715178a54cf23dc63f87cb2c58f3bf4 (patch) | |
tree | a597e2c8263005a4557ff30604c76892403cd9ad /fs/sysfs/bin.c | |
parent | 803f9eb9987e92e1b4c382c33892ec623d821d1d (diff) | |
download | lwn-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.c | 6 |
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; |