mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] sysfs: correctly handle short reads on PREALLOC attrs.
@ 2015-08-05 22:27 NeilBrown
  2015-08-06 13:57 ` Tejun Heo
  0 siblings, 1 reply; 2+ messages in thread
From: NeilBrown @ 2015-08-05 22:27 UTC (permalink / raw)
  To: Tejun Heo, Greg Kroah-Hartman; +Cc: lkml



attributes declared with __ATTR_PREALLOC use sysfs_kf_read()
which ignores the 'count' arg.
So a 1-byte read request can return more bytes than that.

This is seen with the 'dash' shell when 'read' is used on
some 'md' sysfs attributes.

So only return the 'min' of count and the attribute length.

Signed-off-by: NeilBrown <neilb@suse.com>

---
Possibly kernfs_file_direct_read should be changed instead (or as well)
to use the min of 'count' and the return value from ops->read()

Thanks,
NeilBrown

diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
index 6c95628ea377..f35523d4fa3a 100644
--- a/fs/sysfs/file.c
+++ b/fs/sysfs/file.c
@@ -108,6 +108,7 @@ static ssize_t sysfs_kf_read(struct kernfs_open_file *of, char *buf,
 {
 	const struct sysfs_ops *ops = sysfs_file_ops(of->kn);
 	struct kobject *kobj = of->kn->parent->priv;
+	size_t len;
 
 	/*
 	 * If buf != of->prealloc_buf, we don't know how
@@ -115,7 +116,8 @@ static ssize_t sysfs_kf_read(struct kernfs_open_file *of, char *buf,
 	 */
 	if (pos || WARN_ON_ONCE(buf != of->prealloc_buf))
 		return 0;
-	return ops->show(kobj, of->kn->priv, buf);
+	len = ops->show(kobj, of->kn->priv, buf);
+	return min(count, len);
 }
 
 /* kernfs write callback for regular sysfs files */

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] sysfs: correctly handle short reads on PREALLOC attrs.
  2015-08-05 22:27 [PATCH] sysfs: correctly handle short reads on PREALLOC attrs NeilBrown
@ 2015-08-06 13:57 ` Tejun Heo
  0 siblings, 0 replies; 2+ messages in thread
From: Tejun Heo @ 2015-08-06 13:57 UTC (permalink / raw)
  To: NeilBrown; +Cc: Greg Kroah-Hartman, lkml

On Thu, Aug 06, 2015 at 08:27:55AM +1000, NeilBrown wrote:
> 
> 
> attributes declared with __ATTR_PREALLOC use sysfs_kf_read()
> which ignores the 'count' arg.
> So a 1-byte read request can return more bytes than that.
> 
> This is seen with the 'dash' shell when 'read' is used on
> some 'md' sysfs attributes.
> 
> So only return the 'min' of count and the attribute length.
> 
> Signed-off-by: NeilBrown <neilb@suse.com>

Acked-by: Tejun Heo <tj@kernel.org>

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-08-06 13:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-05 22:27 [PATCH] sysfs: correctly handle short reads on PREALLOC attrs NeilBrown
2015-08-06 13:57 ` Tejun Heo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®