[PATCH] memory hotplug: Refuse to add unaligned memory regions

STALE5411d

4 messages, 4 authors, 2011-11-09 · open the first message on its own page

[PATCH] memory hotplug: Refuse to add unaligned memory regions

From: Anton Blanchard <hidden>
Date: 2011-09-14 20:26:22

The sysfs memory probe interface allows unaligned regions
to be added:

# echo 0xffffff > /sys/devices/system/memory/probe

# cat /proc/iomem 
00ffffff-01fffffe : System RAM
01ffffff-02fffffe : System RAM
02ffffff-03fffffe : System RAM
03ffffff-04fffffe : System RAM
04ffffff-05fffffe : System RAM

Return -EINVAL instead of creating these bad regions.

Signed-off-by: Anton Blanchard <redacted>
---

Index: linux-build/drivers/base/memory.c
===================================================================
--- linux-build.orig/drivers/base/memory.c	2011-08-11 08:25:55.005941391 +1000
+++ linux-build/drivers/base/memory.c	2011-08-11 08:28:27.938580440 +1000
@@ -380,9 +380,13 @@ memory_probe_store(struct class *class,
 	u64 phys_addr;
 	int nid;
 	int i, ret;
+	unsigned long pages_per_block = PAGES_PER_SECTION * sections_per_block;
 
 	phys_addr = simple_strtoull(buf, NULL, 0);
 
+	if (phys_addr & ((pages_per_block << PAGE_SHIFT) - 1))
+		return -EINVAL;
+
 	for (i = 0; i < sections_per_block; i++) {
 		nid = memory_add_physaddr_to_nid(phys_addr);
 		ret = add_memory(nid, phys_addr,

Re: [PATCH] memory hotplug: Refuse to add unaligned memory regions

From: Greg KH <gregkh@suse.de>
Date: 2011-09-15 06:46:57

On Thu, Sep 15, 2011 at 06:26:15AM +1000, Anton Blanchard wrote:
The sysfs memory probe interface allows unaligned regions
to be added:

# echo 0xffffff > /sys/devices/system/memory/probe

# cat /proc/iomem 
00ffffff-01fffffe : System RAM
01ffffff-02fffffe : System RAM
02ffffff-03fffffe : System RAM
03ffffff-04fffffe : System RAM
04ffffff-05fffffe : System RAM

Return -EINVAL instead of creating these bad regions.

Signed-off-by: Anton Blanchard <redacted>
---
Is this something that should go into 3.1 and older kernels to properly
handle this type of error?

greg k-h

Re: [PATCH] memory hotplug: Refuse to add unaligned memory regions

From: Andrew Morton <hidden>
Date: 2011-09-15 07:58:29

On Thu, 15 Sep 2011 06:26:15 +1000 Anton Blanchard [off-list ref] wrote:
The sysfs memory probe interface allows unaligned regions
to be added:

# echo 0xffffff > /sys/devices/system/memory/probe

# cat /proc/iomem 
00ffffff-01fffffe : System RAM
01ffffff-02fffffe : System RAM
02ffffff-03fffffe : System RAM
03ffffff-04fffffe : System RAM
04ffffff-05fffffe : System RAM
Then don't do that?

Re: [PATCH] memory hotplug: Refuse to add unaligned memory regions

From: Chen Gong <hidden>
Date: 2011-11-09 07:28:20

于 2011/9/15 4:26, Anton Blanchard 写道:
quoted hunk
The sysfs memory probe interface allows unaligned regions
to be added:

# echo 0xffffff>  /sys/devices/system/memory/probe

# cat /proc/iomem
00ffffff-01fffffe : System RAM
01ffffff-02fffffe : System RAM
02ffffff-03fffffe : System RAM
03ffffff-04fffffe : System RAM
04ffffff-05fffffe : System RAM

Return -EINVAL instead of creating these bad regions.

Signed-off-by: Anton Blanchard<redacted>
---

Index: linux-build/drivers/base/memory.c
===================================================================
--- linux-build.orig/drivers/base/memory.c	2011-08-11 08:25:55.005941391 +1000
+++ linux-build/drivers/base/memory.c	2011-08-11 08:28:27.938580440 +1000
@@ -380,9 +380,13 @@ memory_probe_store(struct class *class,
  	u64 phys_addr;
  	int nid;
  	int i, ret;
+	unsigned long pages_per_block = PAGES_PER_SECTION * sections_per_block;

  	phys_addr = simple_strtoull(buf, NULL, 0);

+	if (phys_addr&  ((pages_per_block<<  PAGE_SHIFT) - 1))
+		return -EINVAL;
+
  	for (i = 0; i<  sections_per_block; i++) {
  		nid = memory_add_physaddr_to_nid(phys_addr);
  		ret = add_memory(nid, phys_addr,
--
what platform doese it affect? PowerPC or else?

As I know, on x86 platform it should not use this interface: *probe*,
instead of acpi_hotplug_xxx. But PowerPC is RISC so how can you add
such weird address for it? Maybe it is because PowerPC uses 16M as
one section size and you assign a wrong address to it intentionally.
The final result is as you show, isn't it?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help