mac80211: fix deauth before assoc
[safe/jmp/linux-2.6] / kernel / early_res.c
index 9ab11cd..31aa933 100644 (file)
@@ -79,9 +79,19 @@ static void __init drop_range_partial(int i, u64 start, u64 end)
                /* make head segment */
                early_res[i].end = common_start;
                if (old_end > common_end) {
+                       char name[15];
+
+                       /*
+                        * Save a local copy of the name, since the
+                        * early_res array could get resized inside
+                        * reserve_early_without_check() ->
+                        * __check_and_double_early_res(), which would
+                        * make the current name pointer invalid.
+                        */
+                       strncpy(name, early_res[i].name,
+                                        sizeof(early_res[i].name) - 1);
                        /* add another for left over on tail */
-                       reserve_early_without_check(common_end, old_end,
-                                        early_res[i].name);
+                       reserve_early_without_check(common_end, old_end, name);
                }
                return;
        } else {
@@ -323,6 +333,12 @@ void __init free_early_partial(u64 start, u64 end)
        struct early_res *r;
        int i;
 
+       if (start == end)
+               return;
+
+       if (WARN_ONCE(start > end, "  wrong range [%#llx, %#llx]\n", start, end))
+               return;
+
 try_next:
        i = find_overlapped_early(start, end);
        if (i >= max_early_res)