Skip to content

Commit

Permalink
[PATCH] SPARSEMEM incorrectly calculates section number
Browse files Browse the repository at this point in the history
A bad calculation/loop in __section_nr() could result in incorrect section
information being put into sysfs memory entries.  This primarily impacts
memory add operations as the sysfs information is used while onlining new
memory.

Fix suggested by Dave Hansen.

Note that the bug may not be obvious from the patch.  It actually occurs in
the function's return statement:

	return (root_nr * SECTIONS_PER_ROOT) + (ms - root);

In the existing code, root_nr has already been multiplied by
SECTIONS_PER_ROOT.

Signed-off-by: Mike Kravetz <kravetz@us.ibm.com>
Cc: Dave Hansen <haveblue@us.ibm.com>
Cc: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Mike Kravetz authored and Linus Torvalds committed May 21, 2006
1 parent ad8f579 commit 12783b0
Showing 1 changed file with 2 additions and 5 deletions.
7 changes: 2 additions & 5 deletions mm/sparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,8 @@ int __section_nr(struct mem_section* ms)
unsigned long root_nr;
struct mem_section* root;

for (root_nr = 0;
root_nr < NR_MEM_SECTIONS;
root_nr += SECTIONS_PER_ROOT) {
root = __nr_to_section(root_nr);

for (root_nr = 0; root_nr < NR_SECTION_ROOTS; root_nr++) {
root = __nr_to_section(root_nr * SECTIONS_PER_ROOT);
if (!root)
continue;

Expand Down

0 comments on commit 12783b0

Please sign in to comment.