]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
roboswitch: Verify that register read succeeds before comparing result
authorJouni Malinen <j@w1.fi>
Sun, 2 Mar 2014 13:12:21 +0000 (15:12 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 2 Mar 2014 15:15:12 +0000 (17:15 +0200)
If wpa_driver_roboswitch_read() fails before such comparison, the values
that are being compared are not initialized properly and as such, there
is not much point in comparing them either.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/drivers/driver_roboswitch.c

index 0a9078a4ab065b06143dddee64f93f324057f1df..9ce3fa2f03ddd406d1a2c7a0d662b5891d358d44 100644 (file)
@@ -260,17 +260,17 @@ static int wpa_driver_roboswitch_join(struct wpa_driver_roboswitch_data *drv,
                                            ROBO_ARLCTRL_CONF, read1, 1);
        } else {
                /* if both multiport addresses are the same we can add */
-               wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
-                                          ROBO_ARLCTRL_ADDR_1, read1, 3);
-               wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
-                                          ROBO_ARLCTRL_ADDR_2, read2, 3);
-               if (os_memcmp(read1, read2, 6) != 0)
+               if (wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
+                                              ROBO_ARLCTRL_ADDR_1, read1, 3) ||
+                   wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
+                                              ROBO_ARLCTRL_ADDR_2, read2, 3) ||
+                   os_memcmp(read1, read2, 6) != 0)
                        return -1;
-               wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
-                                          ROBO_ARLCTRL_VEC_1, read1, 1);
-               wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
-                                          ROBO_ARLCTRL_VEC_2, read2, 1);
-               if (read1[0] != read2[0])
+               if (wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
+                                              ROBO_ARLCTRL_VEC_1, read1, 1) ||
+                   wpa_driver_roboswitch_read(drv, ROBO_ARLCTRL_PAGE,
+                                              ROBO_ARLCTRL_VEC_2, read2, 1) ||
+                   read1[0] != read2[0])
                        return -1;
                wpa_driver_roboswitch_write(drv, ROBO_ARLCTRL_PAGE,
                                            ROBO_ARLCTRL_ADDR_1, addr_be16, 3);