linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH][I2C] fix unsafe usage of list_for_each in i2c-core
@ 2003-06-05 18:48 Andreas Schultz
  2003-06-05 19:48 ` Greg KH
  0 siblings, 1 reply; 2+ messages in thread
From: Andreas Schultz @ 2003-06-05 18:48 UTC (permalink / raw)
  To: linux-kernel; +Cc: greg

Hi,

i2c-core.c contains 2 loops that iterate over the list of the clients attached 
to an adapter and detaches them. Detaching the clients will actually remove 
them from the list the loop is iterating over. Therefore the 
list_for_each_safe() method has to be used.

Andreas

===== i2c-core.c 1.38 vs edited =====
--- 1.38/drivers/i2c/i2c-core.c	Mon May 26 02:00:00 2003
+++ edited/i2c-core.c	Thu Jun  5 15:48:40 2003
@@ -124,7 +125,7 @@
 
 int i2c_del_adapter(struct i2c_adapter *adap)
 {
-	struct list_head  *item;
+	struct list_head  *item, *_n;
 	struct i2c_driver *driver;
 	struct i2c_client *client;
 	int res = 0;
@@ -144,7 +145,7 @@
 
 	/* detach any active clients. This must be done first, because
 	 * it can fail; in which case we give upp. */
-	list_for_each(item,&adap->clients) {
+	list_for_each_safe(item, _n, &adap->clients) {
 		client = list_entry(item, struct i2c_client, list);
 
 		/* detaching devices is unconditional of the set notify
@@ -215,8 +216,7 @@
 
 int i2c_del_driver(struct i2c_driver *driver)
 {
-	struct list_head   *item1;
-	struct list_head   *item2;
+	struct list_head   *item1, *item2, *_n;
 	struct i2c_client  *client;
 	struct i2c_adapter *adap;
 	
@@ -245,7 +245,7 @@
 				goto out_unlock;
 			}
 		} else {
-			list_for_each(item2,&adap->clients) {
+			list_for_each_safe(item2, _n, &adap->clients) {
 				client = list_entry(item2, struct i2c_client, list);
 				if (client->driver != driver)
 					continue;


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

* Re: [PATCH][I2C] fix unsafe usage of list_for_each in i2c-core
  2003-06-05 18:48 [PATCH][I2C] fix unsafe usage of list_for_each in i2c-core Andreas Schultz
@ 2003-06-05 19:48 ` Greg KH
  0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2003-06-05 19:48 UTC (permalink / raw)
  To: Andreas Schultz; +Cc: linux-kernel

On Thu, Jun 05, 2003 at 08:48:21PM +0200, Andreas Schultz wrote:
> Hi,
> 
> i2c-core.c contains 2 loops that iterate over the list of the clients attached 
> to an adapter and detaches them. Detaching the clients will actually remove 
> them from the list the loop is iterating over. Therefore the 
> list_for_each_safe() method has to be used.

Ah, nice catch.  Applied, thanks.

I'm guessing this fixes your other i2c problems you were having?

thanks,

greg k-h

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

end of thread, other threads:[~2003-06-05 20:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-05 18:48 [PATCH][I2C] fix unsafe usage of list_for_each in i2c-core Andreas Schultz
2003-06-05 19:48 ` Greg KH

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).