Kefeng Wang
cfdd12b482
mm: fix possible OOB in numa_rebuild_large_mapping()
...
The large folio is mapped with folio size(not greater PMD_SIZE) aligned
virtual address during the pagefault, ie, 'addr = ALIGN_DOWN(vmf->address,
nr_pages * PAGE_SIZE)' in do_anonymous_page(). But after the mremap(),
the virtual address only requires PAGE_SIZE alignment. Also pte is moved
to new in move_page_tables(), then traversal of the new pte in the
numa_rebuild_large_mapping() could hit the following issue,
Unable to handle kernel paging request at virtual address 00000a80c021a788
Mem abort info:
ESR = 0x0000000096000004
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
FSC = 0x04: level 0 translation fault
Data abort info:
ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
CM = 0, WnR = 0, TnD = 0, TagAccess = 0
GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
user pgtable: 4k pages, 48-bit VAs, pgdp=00002040341a6000
[00000a80c021a788] pgd=0000000000000000, p4d=0000000000000000
Internal error: Oops: 0000000096000004 [#1 ] SMP
...
CPU: 76 PID: 15187 Comm: git Kdump: loaded Tainted: G W 6.10.0-rc2+ #209
Hardware name: Huawei TaiShan 2280 V2/BC82AMDD, BIOS 1.79 08/21/2021
pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : numa_rebuild_large_mapping+0x338/0x638
lr : numa_rebuild_large_mapping+0x320/0x638
sp : ffff8000b41c3b00
x29: ffff8000b41c3b30 x28: ffff8000812a0000 x27: 00000000000a8000
x26: 00000000000000a8 x25: 0010000000000001 x24: ffff20401c7170f0
x23: 0000ffff33a1e000 x22: 0000ffff33a76000 x21: ffff20400869eca0
x20: 0000ffff33976000 x19: 00000000000000a8 x18: ffffffffffffffff
x17: 0000000000000000 x16: 0000000000000020 x15: ffff8000b41c36a8
x14: 0000000000000000 x13: 205d373831353154 x12: 5b5d333331363732
x11: 000000000011ff78 x10: 000000000011ff10 x9 : ffff800080273f30
x8 : 000000320400869e x7 : c0000000ffffd87f x6 : 00000000001e6ba8
x5 : ffff206f3fb5af88 x4 : 0000000000000000 x3 : 0000000000000000
x2 : 0000000000000000 x1 : fffffdffc0000000 x0 : 00000a80c021a780
Call trace:
numa_rebuild_large_mapping+0x338/0x638
do_numa_page+0x3e4/0x4e0
handle_pte_fault+0x1bc/0x238
__handle_mm_fault+0x20c/0x400
handle_mm_fault+0xa8/0x288
do_page_fault+0x124/0x498
do_translation_fault+0x54/0x80
do_mem_abort+0x4c/0xa8
el0_da+0x40/0x110
el0t_64_sync_handler+0xe4/0x158
el0t_64_sync+0x188/0x190
Fix it by making the start and end not only within the vma range, but also
within the page table range.
Link: https://lkml.kernel.org/r/20240612122822.4033433-1-wangkefeng.wang@huawei.com
Fixes: d2136d749d76 ("mm: support multi-size THP numa balancing")
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: "Huang, Ying" <ying.huang@intel.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Liu Shixin <liushixin2@huawei.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-06-15 10:43:07 -07:00
..
2024-05-11 15:41:36 -07:00
2024-04-25 20:55:49 -07:00
2024-04-25 20:55:51 -07:00
2024-06-05 19:19:25 -07:00
2024-05-05 17:53:51 -07:00
2023-10-25 16:47:13 -07:00
2024-02-22 10:24:57 -08:00
2024-04-25 20:56:42 -07:00
2024-02-22 10:24:57 -08:00
2024-04-25 20:56:32 -07:00
2024-04-25 20:56:04 -07:00
2024-05-07 10:37:00 -07:00
2024-05-05 17:53:31 -07:00
2023-12-05 11:17:58 +01:00
2024-05-14 00:31:43 -07:00
2024-06-05 19:19:26 -07:00
2024-04-25 20:56:25 -07:00
2024-05-07 10:37:01 -07:00
2023-12-29 12:22:28 -08:00
2024-04-25 20:55:46 -07:00
2024-06-15 10:43:06 -07:00
2024-05-05 17:53:41 -07:00
2024-04-25 20:56:32 -07:00
2023-10-25 16:47:14 -07:00
2024-06-05 19:19:26 -07:00
2024-05-05 17:53:45 -07:00
2023-12-12 10:11:32 +01:00
2024-06-15 10:43:05 -07:00
2024-05-19 09:21:03 -07:00
2024-01-22 10:31:08 +01:00
2024-05-05 17:53:53 -07:00
2024-05-19 14:40:44 -07:00
2024-06-05 19:19:26 -07:00
2024-02-22 10:24:54 -08:00
2024-05-23 19:40:26 -07:00
2024-05-23 19:40:26 -07:00
2023-08-24 16:20:30 -07:00
2024-02-24 15:53:40 -08:00
2024-06-05 19:19:24 -07:00
2024-03-04 17:01:21 -08:00
2024-05-05 17:53:35 -07:00
2024-05-24 11:55:08 -07:00
2024-05-05 17:53:26 -07:00
2024-06-15 10:43:07 -07:00
2024-04-25 20:56:19 -07:00
2024-06-05 19:19:26 -07:00
2024-05-05 17:53:49 -07:00
2024-03-13 12:12:21 -07:00
2024-05-19 09:21:03 -07:00
2024-06-15 10:43:07 -07:00
2024-04-25 20:56:19 -07:00
2024-06-15 10:43:05 -07:00
2024-05-23 19:40:26 -07:00
2024-02-22 15:27:17 -08:00
2024-04-11 13:18:36 -04:00
2023-12-12 10:57:02 -08:00
2024-05-23 19:40:26 -07:00
2024-05-23 19:40:26 -07:00
2024-05-23 19:40:26 -07:00
2024-05-19 09:21:03 -07:00
2024-04-25 20:56:32 -07:00
2024-06-15 10:43:05 -07:00
2024-04-25 20:56:14 -07:00
2024-06-05 19:19:23 -07:00
2024-04-25 20:56:04 -07:00
2024-05-19 14:40:44 -07:00
2023-12-10 16:51:50 -08:00
2024-01-08 15:27:15 -08:00
2024-06-15 10:43:04 -07:00
2024-05-05 17:53:45 -07:00
2024-05-19 09:21:03 -07:00
2023-12-10 16:51:53 -08:00
2024-04-25 20:55:56 -07:00
2024-04-25 20:55:49 -07:00
2024-04-25 20:55:56 -07:00
2024-05-07 10:37:00 -07:00
2023-12-10 16:51:39 -08:00
2024-02-22 10:24:47 -08:00
2024-05-19 09:21:03 -07:00
2024-05-11 15:41:35 -07:00
2023-08-21 13:38:02 -07:00
2024-03-26 11:07:23 -07:00
2024-05-19 09:21:03 -07:00
2024-04-25 20:55:57 -07:00
2023-10-04 10:32:26 -07:00
2024-01-05 09:58:32 -08:00
2024-01-08 15:27:15 -08:00
2024-05-19 09:21:03 -07:00
2024-05-19 09:21:03 -07:00
2024-06-05 19:19:26 -07:00
2024-05-05 17:53:40 -07:00
2024-04-25 20:56:37 -07:00
2024-04-25 20:56:40 -07:00
2024-05-05 17:53:50 -07:00
2024-02-20 14:20:48 -08:00
2024-05-21 08:34:51 -07:00
2024-04-25 20:56:43 -07:00
2024-05-19 09:21:03 -07:00
2024-06-05 19:19:26 -07:00
2024-06-05 19:19:25 -07:00
2023-11-28 14:08:38 +01:00
2024-06-05 19:19:23 -07:00
2024-04-15 14:31:47 +02:00
2024-05-07 10:36:59 -07:00
2024-04-25 20:55:48 -07:00
2024-04-25 20:55:48 -07:00
2024-04-25 20:55:48 -07:00
2024-04-25 20:55:48 -07:00
2024-05-05 17:53:38 -07:00