Skip to content

Commit

Permalink
early_res: Need to save the allocation name in drop_range_partial()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Yinghai Lu authored and H. Peter Anvin committed Mar 2, 2010
1 parent 81d0d95 commit dce46a0
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions kernel/early_res.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit dce46a0

Please sign in to comment.