]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Do not change out-of-range configuration parameters
authorJouni Malinen <j@w1.fi>
Sun, 3 Mar 2024 17:55:45 +0000 (19:55 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 3 Mar 2024 17:55:45 +0000 (19:55 +0200)
The INT_RANGE() cases for wpa_supplicant global and network profile
parameters ended up changing the configured value to the minimum value
if the provided value was too small or to the maximum value if the
provided value was too large. This does not seem most logical. Change
this to not change the configured value at all if the provided value is
outside the valid range.

Signed-off-by: Jouni Malinen <j@w1.fi>
wpa_supplicant/config.c

index b81d8031895a1e0ab2f85654f55164b78b8e5298..b4d4830825415244ed8544f4be315aed9425c3b3 100644 (file)
@@ -213,27 +213,26 @@ static int wpa_config_parse_int_impl(const struct parse_data *data,
                return -1;
        }
 
-       if (*dst == val)
-               return 1;
-       *dst = val;
-       wpa_printf(MSG_MSGDUMP, "%s=%d (0x%x)", data->name, *dst, *dst);
-
-       if (check_range && *dst < (long) data->param3) {
+       if (check_range && val < (long) data->param3) {
                wpa_printf(MSG_ERROR, "Line %d: too small %s (value=%d "
-                          "min_value=%ld)", line, data->name, *dst,
+                          "min_value=%ld)", line, data->name, val,
                           (long) data->param3);
-               *dst = (long) data->param3;
                return -1;
        }
 
-       if (check_range && *dst > (long) data->param4) {
+       if (check_range && val > (long) data->param4) {
                wpa_printf(MSG_ERROR, "Line %d: too large %s (value=%d "
-                          "max_value=%ld)", line, data->name, *dst,
+                          "max_value=%ld)", line, data->name, val,
                           (long) data->param4);
-               *dst = (long) data->param4;
                return -1;
        }
 
+       if (*dst == val)
+               return 1;
+
+       *dst = val;
+       wpa_printf(MSG_MSGDUMP, "%s=%d (0x%x)", data->name, *dst, *dst);
+
        return 0;
 }
 
@@ -4773,27 +4772,26 @@ wpa_global_config_parse_int_impl(const struct global_parse_data *data,
                           line, pos);
                return -1;
        }
-       same = *dst == val;
-       *dst = val;
-
-       wpa_printf(MSG_DEBUG, "%s=%d", data->name, *dst);
 
-       if (check_range && *dst < (long) data->param2) {
+       if (check_range && val < (long) data->param2) {
                wpa_printf(MSG_ERROR, "Line %d: too small %s (value=%d "
-                          "min_value=%ld)", line, data->name, *dst,
+                          "min_value=%ld)", line, data->name, val,
                           (long) data->param2);
-               *dst = (long) data->param2;
                return -1;
        }
 
-       if (check_range && *dst > (long) data->param3) {
+       if (check_range && val > (long) data->param3) {
                wpa_printf(MSG_ERROR, "Line %d: too large %s (value=%d "
-                          "max_value=%ld)", line, data->name, *dst,
+                          "max_value=%ld)", line, data->name, val,
                           (long) data->param3);
-               *dst = (long) data->param3;
                return -1;
        }
 
+       same = *dst == val;
+       *dst = val;
+
+       wpa_printf(MSG_DEBUG, "%s=%d", data->name, *dst);
+
        return same;
 }