ipmi: Don't leave holes in the I2C address list in the ssif driver
authorCorey Minyard <cminyard@mvista.com>
Thu, 30 Aug 2018 18:14:59 +0000 (13:14 -0500)
committerCorey Minyard <cminyard@mvista.com>
Tue, 18 Sep 2018 21:15:33 +0000 (16:15 -0500)
The algorithm to populate the I2C address list would leave holes
in the list on duplicates.

Signed-off-by: Corey Minyard <cminyard@mvista.com>
drivers/char/ipmi/ipmi_ssif.c

index 61bc493..09dcfdd 100644 (file)
@@ -1739,7 +1739,7 @@ static void free_ssif_clients(void)
 static unsigned short *ssif_address_list(void)
 {
        struct ssif_addr_info *info;
-       unsigned int count = 0, i;
+       unsigned int count = 0, i = 0;
        unsigned short *address_list;
 
        list_for_each_entry(info, &ssif_infos, link)
@@ -1750,18 +1750,17 @@ static unsigned short *ssif_address_list(void)
        if (!address_list)
                return NULL;
 
-       i = 0;
        list_for_each_entry(info, &ssif_infos, link) {
                unsigned short addr = info->binfo.addr;
                int j;
 
                for (j = 0; j < i; j++) {
                        if (address_list[j] == addr)
-                               goto skip_addr;
+                               /* Found a dup. */
+                               break;
                }
-               address_list[i] = addr;
-skip_addr:
-               i++;
+               if (j == i) /* Didn't find it in the list. */
+                       address_list[i++] = addr;
        }
        address_list[i] = I2C_CLIENT_END;