Russ Anderson
21ea9f5ace
drivers/base/memory.c: fix show_mem_removable() to handle missing sections
...
"cat /sys/devices/system/memory/memory*/removable" crashed the system.
The problem is that show_mem_removable() is passing a
bad pfn to is_mem_section_removable(), which causes
if (!node_online(page_to_nid(page)))
to blow up. Why is it passing in a bad pfn?
The reason is that show_mem_removable() will loop sections_per_block
times. sections_per_block is 16, but mem->section_count is 8,
indicating holes in this memory block. Checking that the memory section
is present before checking to see if the memory section is removable
fixes the problem.
harp5-sys:~ # cat /sys/devices/system/memory/memory*/removable
0
1
1
1
1
1
1
1
1
1
1
1
1
1
BUG: unable to handle kernel paging request at ffffea00c3200000
IP: [<ffffffff81117ed1>] is_pageblock_removable_nolock+0x1/0x90
PGD 83ffd4067 PUD 37bdfce067 PMD 0
Oops: 0000 [#1 ] SMP
Modules linked in: autofs4 binfmt_misc rdma_ucm rdma_cm iw_cm ib_addr ib_srp scsi_transport_srp scsi_tgt ib_ipoib ib_cm ib_uverbs ib_umad iw_cxgb3 cxgb3 mdio mlx4_en mlx4_ib ib_sa mlx4_core ib_mthca ib_mad ib_core fuse nls_iso8859_1 nls_cp437 vfat fat joydev loop hid_generic usbhid hid hwperf(O) numatools(O) dm_mod iTCO_wdt ipv6 iTCO_vendor_support igb i2c_i801 ioatdma i2c_algo_bit ehci_pci pcspkr lpc_ich i2c_core ehci_hcd ptp sg mfd_core dca rtc_cmos pps_core mperf button xhci_hcd sd_mod crc_t10dif usbcore usb_common scsi_dh_emc scsi_dh_hp_sw scsi_dh_alua scsi_dh_rdac scsi_dh gru(O) xvma(O) xfs crc32c libcrc32c thermal sata_nv processor piix mptsas mptscsih scsi_transport_sas mptbase megaraid_sas fan thermal_sys hwmon ext3 jbd ata_piix ahci libahci libata scsi_mod
CPU: 4 PID: 5991 Comm: cat Tainted: G O 3.11.0-rc5-rja-uv+ #10
Hardware name: SGI UV2000/ROMLEY, BIOS SGI UV 2000/3000 series BIOS 01/15/2013
task: ffff88081f034580 ti: ffff880820022000 task.ti: ffff880820022000
RIP: 0010:[<ffffffff81117ed1>] [<ffffffff81117ed1>] is_pageblock_removable_nolock+0x1/0x90
RSP: 0018:ffff880820023df8 EFLAGS: 00010287
RAX: 0000000000040000 RBX: ffffea00c3200000 RCX: 0000000000000004
RDX: ffffea00c30b0000 RSI: 00000000001c0000 RDI: ffffea00c3200000
RBP: ffff880820023e38 R08: 0000000000000000 R09: 0000000000000001
R10: 0000000000000000 R11: 0000000000000001 R12: ffffea00c33c0000
R13: 0000160000000000 R14: 6db6db6db6db6db7 R15: 0000000000000001
FS: 00007ffff7fb2700(0000) GS:ffff88083fc80000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: ffffea00c3200000 CR3: 000000081b954000 CR4: 00000000000407e0
Call Trace:
show_mem_removable+0x41/0x70
dev_attr_show+0x2a/0x60
sysfs_read_file+0xf7/0x1c0
vfs_read+0xc8/0x130
SyS_read+0x5d/0xa0
system_call_fastpath+0x16/0x1b
Signed-off-by: Russ Anderson <rja@sgi.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Reviewed-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-08-28 19:26:38 -07:00
..
2013-07-31 14:41:03 -07:00
2013-08-22 23:39:02 +02:00
2013-08-20 08:38:23 -04:00
2013-08-28 19:26:38 -07:00
2013-08-13 17:57:48 -07:00
2013-07-31 15:11:50 -04:00
2013-08-08 09:32:20 -07:00
2013-08-13 10:01:56 -07:00
2013-07-14 19:36:57 -04:00
2013-08-07 22:25:06 +02:00
2013-07-29 13:32:29 +02:00
2013-07-24 11:05:18 -07:00
2013-07-03 17:12:13 -07:00
2013-08-08 09:28:08 -07:00
2013-07-23 16:01:28 -07:00
2013-07-03 16:07:41 -07:00
2013-07-27 20:24:36 +02:00
2013-07-31 14:41:02 -07:00
2013-07-31 00:34:31 +02:00
2013-08-23 18:52:37 +10:00
2013-08-09 11:34:19 +02:00
2013-07-03 16:07:41 -07:00
2013-07-16 23:19:19 -07:00
2013-08-08 12:43:07 -07:00
2013-08-05 10:31:18 +02:00
2013-07-10 18:15:41 -07:00
2013-08-19 19:30:21 +01:00
2013-07-31 14:24:06 -07:00
2013-07-13 18:05:13 -07:00
2013-07-10 14:46:40 -07:00
2013-07-14 19:36:57 -04:00
2013-07-09 18:24:39 -07:00
2013-07-04 11:40:58 -07:00
2013-08-01 13:11:47 +10:00
2013-08-16 15:56:51 -04:00
2013-08-09 15:04:09 -07:00
2013-07-03 16:08:06 -07:00
2013-07-03 16:07:41 -07:00
2013-07-10 11:10:27 -07:00
2013-07-26 11:36:12 -07:00
2013-07-23 12:15:15 -07:00
2013-07-05 12:09:48 -07:00
2013-08-22 19:58:23 -07:00
2013-07-09 18:24:39 -07:00
2013-08-21 20:05:49 -05:00
2013-07-14 19:36:59 -04:00
2013-07-31 23:42:32 +02:00
2013-07-03 17:12:13 -07:00
2013-08-07 22:55:00 +02:00
2013-08-07 21:57:17 +02:00
2013-08-23 09:52:32 -07:00
2013-07-18 01:38:59 +02:00
2013-07-10 11:13:00 -07:00
2013-07-03 16:08:06 -07:00
2013-07-31 14:41:02 -07:00
2013-07-10 11:10:27 -07:00
2013-07-11 12:35:09 -07:00
2013-08-13 17:57:48 -07:00
2013-08-22 09:26:51 -07:00
2013-08-21 10:54:20 -07:00
2013-07-29 20:27:54 +01:00
2013-07-13 14:52:21 -07:00
2013-08-23 10:31:47 -07:00
2013-07-11 12:57:19 -07:00
2013-07-22 09:34:46 +08:00
2013-08-27 16:59:56 +10:00
2013-08-26 15:22:15 -07:00
2013-07-03 16:07:41 -07:00
2013-07-24 16:36:41 -06:00
2013-07-23 14:38:20 -07:00
2013-08-09 11:52:34 -07:00
2013-07-10 14:50:58 -07:00
2013-07-03 16:08:06 -07:00
2013-07-13 14:52:21 -07:00
2013-08-21 16:38:33 -07:00
2013-07-10 11:10:27 -07:00
2013-07-10 11:10:27 -07:00