LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] HID: fix a potential bug in pointer casting
@ 2007-11-14  8:17 Li Zefan
  2007-11-14 13:07 ` Jiri Kosina
  0 siblings, 1 reply; 2+ messages in thread
From: Li Zefan @ 2007-11-14  8:17 UTC (permalink / raw)
  To: Andrew Morton; +Cc: jkosina, linux-usb-devel, LKML


Don't directly cast list_head * to foo *, this works only when list
is the first member of struct foo, and we should not make the assumption
how members are ordered in the structure.

i.e. struct *f = (struct *f)pos will work if:
	struct foo {
		struct list_head list;
		int i;
	};

but will fail if:
	struct foo {
		int i;
		struct list_head list;
	}

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>

---
 drivers/hid/usbhid/hid-tmff.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/hid/usbhid/hid-tmff.c b/drivers/hid/usbhid/hid-tmff.c
index 69882a7..144578b 100644
--- a/drivers/hid/usbhid/hid-tmff.c
+++ b/drivers/hid/usbhid/hid-tmff.c
@@ -137,7 +137,8 @@ static int hid_tmff_play(struct input_dev *dev, void *data, struct ff_effect *ef
 int hid_tmff_init(struct hid_device *hid)
 {
 	struct tmff_device *tmff;
-	struct list_head *pos;
+	struct hid_report *report;
+	struct list_head *report_list;
 	struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list);
 	struct input_dev *input_dev = hidinput->input;
 	const signed short *ff_bits = ff_joystick;
@@ -149,8 +150,8 @@ int hid_tmff_init(struct hid_device *hid)
 		return -ENOMEM;
 
 	/* Find the report to use */
-	list_for_each(pos, &hid->report_enum[HID_OUTPUT_REPORT].report_list) {
-		struct hid_report *report = (struct hid_report *)pos;
+	report_list = &hid->report_enum[HID_OUTPUT_REPORT].report_list;
+	list_for_each_entry(report, report_list, list) {
 		int fieldnum;
 
 		for (fieldnum = 0; fieldnum < report->maxfield; ++fieldnum) {
-- 
1.5.3.rc7


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

* Re: [PATCH] HID: fix a potential bug in pointer casting
  2007-11-14  8:17 [PATCH] HID: fix a potential bug in pointer casting Li Zefan
@ 2007-11-14 13:07 ` Jiri Kosina
  0 siblings, 0 replies; 2+ messages in thread
From: Jiri Kosina @ 2007-11-14 13:07 UTC (permalink / raw)
  To: Li Zefan; +Cc: Andrew Morton, linux-usb-devel, LKML

On Wed, 14 Nov 2007, Li Zefan wrote:

> Don't directly cast list_head * to foo *, this works only when list is 
> the first member of struct foo, and we should not make the assumption 
> how members are ordered in the structure.

Hi,

applied to my tree, thanks!

-- 
Jiri Kosina
SUSE Labs

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

end of thread, other threads:[~2007-11-14 13:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-11-14  8:17 [PATCH] HID: fix a potential bug in pointer casting Li Zefan
2007-11-14 13:07 ` Jiri Kosina

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).