You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
mm: hwpoison: coredump: support recovery from dump_user_range()
The dump_user_range() is used to copy the user page to a coredump
file, but if a hardware memory error occurred during copy, which
called from __kernel_write_iter() in dump_user_range(), it crashs,
CPU: 112 PID: 7014 Comm: mca-recover Not tainted 6.3.0-rc2 torvalds#425
pc : __memcpy+0x110/0x260
lr : _copy_from_iter+0x3bc/0x4c8
...
Call trace:
__memcpy+0x110/0x260
copy_page_from_iter+0xcc/0x130
pipe_write+0x164/0x6d8
__kernel_write_iter+0x9c/0x210
dump_user_range+0xc8/0x1d8
elf_core_dump+0x308/0x368
do_coredump+0x2e8/0xa40
get_signal+0x59c/0x788
do_signal+0x118/0x1f8
do_notify_resume+0xf0/0x280
el0_da+0x130/0x138
el0t_64_sync_handler+0x68/0xc0
el0t_64_sync+0x188/0x190
Generally, the '->write_iter' of file ops will use copy_page_from_iter()
and copy_page_from_iter_atomic(), change memcpy() to copy_mc_to_kernel()
in both of them to handle #MC during source read, which stop coredump
processing and kill the task instead of kernel panic, but the source
address may not always an user address, so introduce a new copy_mc flag
in struct iov_iter{} to indicate that the iter could do a safe memory
copy, also introduce the helpers to set/clear/check the flag, for now,
it's only used in coredump's dump_user_range(), but it could expand to
any other scenarios to fix the similar issue.
Signed-off-by: Kefeng Wang <[email protected]>
0 commit comments