diff --git a/[refs] b/[refs] index 495d3020518f..294ba6dd5dfe 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 81d0d950e5037a26b71e568ff235ff9e998f4ab3 +refs/heads/master: dce46a04d55d6358d2d4ab44a4946a19f9425fe2 diff --git a/trunk/kernel/early_res.c b/trunk/kernel/early_res.c index 9ab11cd84853..3cb2c661bb78 100644 --- a/trunk/kernel/early_res.c +++ b/trunk/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 {