Re: [PATCH] i2c driver changes for 2.5.70

From: Greg KH (greg@kroah.com)
Date: Thu Jun 05 2003 - 15:55:59 EST


ChangeSet 1.1259.3.3, 2003/06/05 12:45:18-07:00, aschultz@warp10.net

[PATCH] I2C: fix unsafe usage of list_for_each in i2c-core

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.

 drivers/i2c/i2c-core.c | 9 ++++-----
 1 files changed, 4 insertions(+), 5 deletions(-)

diff -Nru a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
--- a/drivers/i2c/i2c-core.c Thu Jun 5 13:50:05 2003
+++ b/drivers/i2c/i2c-core.c Thu Jun 5 13:50:05 2003
@@ -124,7 +124,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 +144,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 +215,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 +244,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;

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Jun 07 2003 - 22:00:28 EST