فهرست منبع

early_res: Need to save the allocation name in drop_range_partial()

During free_early_partial(), reserve_early_without_check() could end
extending the early_res area from __check_and_double_early_res(); as a
result, the location of the name for the current reservation could
change.

Therefore, we need to save a local copy of the name.

[ hpa: rewrote comment and checkin description ]

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
LKML-Reference: <4B8C7C94.7070000@kernel.org>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Yinghai Lu 15 سال پیش
والد
کامیت
dce46a04d5
1فایلهای تغییر یافته به همراه12 افزوده شده و 2 حذف شده
  1. 12 2
      kernel/early_res.c

+ 12 - 2
kernel/early_res.c

@@ -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 {