All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Schultz <aschultz@warp10.net>
To: linux-kernel@vger.kernel.org
Cc: greg@kroah.com
Subject: [PATCH][I2C] fix unsafe usage of list_for_each in i2c-core
Date: Thu, 5 Jun 2003 20:48:21 +0200	[thread overview]
Message-ID: <200306052048.21409.aschultz@warp10.net> (raw)

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;


             reply	other threads:[~2003-06-05 18:34 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-06-05 18:48 Andreas Schultz [this message]
2003-06-05 19:48 ` [PATCH][I2C] fix unsafe usage of list_for_each in i2c-core Greg KH

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=200306052048.21409.aschultz@warp10.net \
    --to=aschultz@warp10.net \
    --cc=greg@kroah.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.