public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: David Fries <david@fries.net>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Evgeniy Polyakov <johnpol@2ka.mipt.ru>, linux-kernel@vger.kernel.org
Subject: [PATCH 11/30] W1: w1_slave_read_id read bug, use device_attribute
Date: Wed, 30 Jul 2008 21:49:04 -0500	[thread overview]
Message-ID: <20080731024904.GL12181@spacedout.fries.net> (raw)
In-Reply-To: <20080729161356.2de456fb.akpm@linux-foundation.org>

Fix bug reading the id sysfs file.  If less than the full 8 bytes were
read, the next read would start at the first byte instead of
continuing.  It needed the offset added to memcpy, or the better
solution was to replace it with the device attribute instead of bin
attribute.

Signed-off-by: David Fries <david@fries.net>
Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
---
 drivers/w1/w1.c |   35 ++++++++++-------------------------
 1 files changed, 10 insertions(+), 25 deletions(-)

diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
index cd5bd23..3b15c57 100644
--- a/drivers/w1/w1.c
+++ b/drivers/w1/w1.c
@@ -103,35 +103,20 @@ static ssize_t w1_slave_read_name(struct device *dev, struct device_attribute *a
 	return sprintf(buf, "%s\n", sl->name);
 }
 
-static ssize_t w1_slave_read_id(struct kobject *kobj,
-				struct bin_attribute *bin_attr,
-				char *buf, loff_t off, size_t count)
+static ssize_t w1_slave_read_id(struct device *dev,
+	struct device_attribute *attr, char *buf)
 {
-	struct w1_slave *sl = kobj_to_w1_slave(kobj);
-
-	if (off > 8) {
-		count = 0;
-	} else {
-		if (off + count > 8)
-			count = 8 - off;
-
-		memcpy(buf, (u8 *)&sl->reg_num, count);
-	}
+	struct w1_slave *sl = dev_to_w1_slave(dev);
+	ssize_t count = sizeof(sl->reg_num);
 
+	memcpy(buf, (u8 *)&sl->reg_num, count);
 	return count;
 }
 
 static struct device_attribute w1_slave_attr_name =
 	__ATTR(name, S_IRUGO, w1_slave_read_name, NULL);
-
-static struct bin_attribute w1_slave_attr_bin_id = {
-      .attr = {
-              .name = "id",
-              .mode = S_IRUGO,
-      },
-      .size = 8,
-      .read = w1_slave_read_id,
-};
+static struct device_attribute w1_slave_attr_id =
+	__ATTR(id, S_IRUGO, w1_slave_read_id, NULL);
 
 /* Default family */
 
@@ -649,7 +634,7 @@ static int __w1_attach_slave_device(struct w1_slave *sl)
 	}
 
 	/* Create "id" entry */
-	err = sysfs_create_bin_file(&sl->dev.kobj, &w1_slave_attr_bin_id);
+	err = device_create_file(&sl->dev, &w1_slave_attr_id);
 	if (err < 0) {
 		dev_err(&sl->dev,
 			"sysfs file creation for [%s] failed. err=%d\n",
@@ -671,7 +656,7 @@ static int __w1_attach_slave_device(struct w1_slave *sl)
 	return 0;
 
 out_rem2:
-	sysfs_remove_bin_file(&sl->dev.kobj, &w1_slave_attr_bin_id);
+	device_remove_file(&sl->dev, &w1_slave_attr_id);
 out_rem1:
 	device_remove_file(&sl->dev, &w1_slave_attr_name);
 out_unreg:
@@ -753,7 +738,7 @@ void w1_slave_detach(struct w1_slave *sl)
 	msg.type = W1_SLAVE_REMOVE;
 	w1_netlink_send(sl->master, &msg);
 
-	sysfs_remove_bin_file(&sl->dev.kobj, &w1_slave_attr_bin_id);
+	device_remove_file(&sl->dev, &w1_slave_attr_id);
 	device_remove_file(&sl->dev, &w1_slave_attr_name);
 	device_unregister(&sl->dev);
 
-- 
1.4.4.4

  parent reply	other threads:[~2008-07-31  2:51 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-29  2:04 [PATCH 0/30] W1: w1 core fixes, ds2490 updates, strong pullup David Fries
2008-07-29  2:10 ` [PATCH 1/30] W1: fix deadlocks and remove w1_control_thread David Fries
2008-07-29  2:12 ` [PATCH 2/30] W1: abort search early on on exit David Fries
2008-07-29  2:13 ` [PATCH 3/30] W1: don't delay search start David Fries
2008-07-29  2:14 ` [PATCH 4/30] W1: w1_process, block or sleep David Fries
2008-07-29  2:14 ` [PATCH 5/30] W1: feature, enable hardware strong pullup David Fries
2008-07-29 23:21   ` Andrew Morton
2008-07-29  2:15 ` [PATCH 6/30] W1: feature, w1_therm.c use strong pullup and documentation David Fries
2008-07-29  2:17 ` [PATCH 7/30] W1: be able to manually add and remove slaves David Fries
2008-07-29  2:18 ` [PATCH 8/30] W1: recode w1_slave_found logic David Fries
2008-07-29  2:19 ` [PATCH 9/30] W1: new module parameter search_count David Fries
2008-07-29  2:20 ` [PATCH 10/30] W1: Document add, remove, search_count, and pullup David Fries
2008-07-29  2:21 ` [PATCH 11/30] W1: w1_slave_read_id read bug, use device_attribute David Fries
2008-07-29  2:21 ` [PATCH 12/30] W1: w1_therm fix user buffer overflow and cat David Fries
2008-07-29  2:21 ` [PATCH 13/30] W1: w1_family, remove unused variable need_exit David Fries
2008-07-29  2:22 ` [PATCH 14/30] W1: w1_therm consistent mutex access code cleanup David Fries
2008-07-29  2:23 ` [PATCH 15/30] W1: w1_int.c use first available master number David Fries
2008-07-29  2:23 ` [PATCH 16/30] W1: w1.c s/printk/dev_dbg/ David Fries
2008-07-29  2:24 ` [PATCH 17/30] W1: w1_io.c reset comments and msleep David Fries
2008-07-29  2:24 ` [PATCH 18/30] W1: ds1wm.c msleep for reset David Fries
2008-07-29  2:25 ` [PATCH 19/30] W1: ds2490.c correct print message David Fries
2008-07-29  2:25 ` [PATCH 20/30] W1: ds2490.c add support for strong pullup David Fries
2008-07-29  2:25 ` [PATCH 21/30] W1: ds2490.c ds_write_bit, grouping error, disable readback David Fries
2008-07-29  2:25 ` [PATCH 22/30] W1: ds2490.c disable bit read and write David Fries
2008-07-29  2:26 ` [PATCH 23/30] W1: ds2490.c simplify and fix ds_touch_bit David Fries
2008-07-29  2:26 ` [PATCH 24/30] W1: ds2490.c ds_dump_status rework David Fries
2008-07-29  2:26 ` [PATCH 25/30] W1: ds2490.c ds_reset remove ds_wait_status David Fries
2008-07-29  2:27 ` [PATCH 26/30] W1: ds2490.c reset ds2490 in init David Fries
2008-07-29  2:28 ` [PATCH 27/30] W1: ds2490.c magic number work David Fries
2008-07-29  2:28 ` [PATCH 28/30] W1: ds2490.c ds_write_block remove extra ds_wait_status David Fries
2008-07-29  2:29 ` [PATCH 29/30] W1: Documentation/w1/masters/ds2490 update David Fries
2008-07-29  2:30 ` [PATCH 30/30] W1: ds2490.c optimize ds_set_pullup David Fries
2008-07-29 23:13 ` [PATCH 0/30] W1: w1 core fixes, ds2490 updates, strong pullup Andrew Morton
2008-07-31  2:37   ` David Fries
2008-07-31  3:03     ` Andrew Morton
2008-07-31  2:47   ` [PATCH 1/30] W1: fix deadlocks and remove w1_control_thread David Fries
2008-07-31  2:48   ` [PATCH 2/30] W1: abort search early on on exit David Fries
2008-07-31  2:48   ` [PATCH 3/30] W1: don't delay search start David Fries
2008-07-31  2:48   ` [PATCH 4/30] W1: w1_process, block or sleep David Fries
2008-07-31  2:48   ` [PATCH 5/30] W1: feature, enable hardware strong pullup David Fries
2008-07-31  2:48   ` [PATCH 6/30] W1: feature, w1_therm.c use strong pullup and documentation David Fries
2008-07-31  2:48   ` [PATCH 7/30] W1: be able to manually add and remove slaves David Fries
2008-07-31  2:48   ` [PATCH 8/30] W1: recode w1_slave_found logic David Fries
2008-07-31  2:48   ` [PATCH 9/30] W1: new module parameter search_count David Fries
2008-07-31  2:49   ` [PATCH 10/30] W1: Document add, remove, search_count, and pullup David Fries
2008-07-31  2:49   ` David Fries [this message]
2008-07-31  2:49   ` [PATCH 12/30] W1: w1_therm fix user buffer overflow and cat David Fries
2008-07-31  2:49   ` [PATCH 13/30] W1: w1_family, remove unused variable need_exit David Fries
2008-07-31  2:49   ` [PATCH 14/30] W1: w1_therm consistent mutex access code cleanup David Fries
2008-07-31  2:49   ` [PATCH 15/30] W1: w1_int.c use first available master number David Fries
2008-07-31  2:49   ` [PATCH 16/30] W1: w1.c s/printk/dev_dbg/ David Fries
2008-07-31  2:49   ` [PATCH 17/30] W1: w1_io.c reset comments and msleep David Fries
2008-07-31  2:49   ` [PATCH 18/30] W1: ds1wm.c msleep for reset David Fries
2008-07-31  2:49   ` [PATCH 19/30] W1: ds2490.c correct print message David Fries
2008-07-31  2:49   ` [PATCH 20/30] W1: ds2490.c add support for strong pullup David Fries
2008-07-31  2:50   ` [PATCH 21/30] W1: ds2490.c ds_write_bit, grouping error, disable readback David Fries
2008-07-31  2:50   ` [PATCH 22/30] W1: ds2490.c disable bit read and write David Fries
2008-07-31  2:50   ` [PATCH 23/30] W1: ds2490.c simplify and fix ds_touch_bit David Fries
2008-07-31  2:50   ` [PATCH 24/30] W1: ds2490.c ds_dump_status rework David Fries
2008-07-31  2:50   ` [PATCH 25/30] W1: ds2490.c ds_reset remove ds_wait_status David Fries
2008-07-31  2:50   ` [PATCH 26/30] W1: ds2490.c reset ds2490 in init David Fries
2008-07-31  2:50   ` [PATCH 27/30] W1: ds2490.c magic number work David Fries
2008-07-31  2:50   ` [PATCH 28/30] W1: ds2490.c ds_write_block remove extra ds_wait_status David Fries
2008-07-31  2:50   ` [PATCH 29/30] W1: Documentation/w1/masters/ds2490 update David Fries
2008-07-31  2:50   ` [PATCH 30/30] W1: ds2490.c optimize ds_set_pullup David Fries
  -- strict thread matches above, loose matches on Subject: below --
2008-07-11 13:51 w1 updates Evgeniy Polyakov
2008-07-11 13:51 ` [PATCH 11/30] W1: w1_slave_read_id read bug, use device_attribute Evgeniy Polyakov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080731024904.GL12181@spacedout.fries.net \
    --to=david@fries.net \
    --cc=akpm@linux-foundation.org \
    --cc=johnpol@2ka.mipt.ru \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox