• A
    pstore/platform: Disable automatic updates by default · 521f7288
    Anton Vorontsov 提交于
    Having automatic updates seems pointless for production system, and
    even dangerous and thus counter-productive:
    
    1. If we can mount pstore, or read files, we can as well read
       /proc/kmsg. So, there's little point in duplicating the
       functionality and present the same information but via another
       userland ABI;
    
    2. Expecting the kernel to behave sanely after oops/panic is naive.
       It might work, but you'd rather not try it. Screwed up kernel
       can do rather bad things, like recursive faults[1]; and pstore
       rather provoking bad things to happen. It uses:
    
       1. Timers (assumes sane interrupts state);
       2. Workqueues and mutexes (assumes scheduler in a sane state);
       3. kzalloc (a working slab allocator);
    
       That's too much for a dead kernel, so the debugging facility
       itself might just make debugging harder, which is not what
       we want.
    
    Maybe for non-oops message types it would make sense to re-enable
    automatic updates, but so far I don't see any use case for this.
    Even for tracing, it has its own run-time/normal ABI, so we're
    only interested in pstore upon next boot, to retrieve what has
    gone wrong with HW or SW.
    
    So, let's disable the updates by default.
    
    [1]
    BUG: unable to handle kernel paging request at fffffffffffffff8
    IP: [<ffffffff8104801b>] kthread_data+0xb/0x20
    [...]
    Process kworker/0:1 (pid: 14, threadinfo ffff8800072c0000, task ffff88000725b100)
    [...
    Call Trace:
     [<ffffffff81043710>] wq_worker_sleeping+0x10/0xa0
     [<ffffffff813687a8>] __schedule+0x568/0x7d0
     [<ffffffff8106c24d>] ? trace_hardirqs_on+0xd/0x10
     [<ffffffff81087e22>] ? call_rcu_sched+0x12/0x20
     [<ffffffff8102b596>] ? release_task+0x156/0x2d0
     [<ffffffff8102b45e>] ? release_task+0x1e/0x2d0
     [<ffffffff8106c24d>] ? trace_hardirqs_on+0xd/0x10
     [<ffffffff81368ac4>] schedule+0x24/0x70
     [<ffffffff8102cba8>] do_exit+0x1f8/0x370
     [<ffffffff810051e7>] oops_end+0x77/0xb0
     [<ffffffff8135c301>] no_context+0x1a6/0x1b5
     [<ffffffff8135c4de>] __bad_area_nosemaphore+0x1ce/0x1ed
     [<ffffffff81053156>] ? ttwu_queue+0xc6/0xe0
     [<ffffffff8135c50b>] bad_area_nosemaphore+0xe/0x10
     [<ffffffff8101fa47>] do_page_fault+0x2c7/0x450
     [<ffffffff8106e34b>] ? __lock_release+0x6b/0xe0
     [<ffffffff8106bf21>] ? mark_held_locks+0x61/0x140
     [<ffffffff810502fe>] ? __wake_up+0x4e/0x70
     [<ffffffff81185f7d>] ? trace_hardirqs_off_thunk+0x3a/0x3c
     [<ffffffff81158970>] ? pstore_register+0x120/0x120
     [<ffffffff8136a37f>] page_fault+0x1f/0x30
     [<ffffffff81158970>] ? pstore_register+0x120/0x120
     [<ffffffff81185ab8>] ? memcpy+0x68/0x110
     [<ffffffff8115875a>] ? pstore_get_records+0x3a/0x130
     [<ffffffff811590f4>] ? persistent_ram_copy_old+0x64/0x90
     [<ffffffff81158bf4>] ramoops_pstore_read+0x84/0x130
     [<ffffffff81158799>] pstore_get_records+0x79/0x130
     [<ffffffff81042536>] ? process_one_work+0x116/0x450
     [<ffffffff81158970>] ? pstore_register+0x120/0x120
     [<ffffffff8115897e>] pstore_dowork+0xe/0x10
     [<ffffffff81042594>] process_one_work+0x174/0x450
     [<ffffffff81042536>] ? process_one_work+0x116/0x450
     [<ffffffff81042e13>] worker_thread+0x123/0x2d0
     [<ffffffff81042cf0>] ? manage_workers.isra.28+0x120/0x120
     [<ffffffff81047d8e>] kthread+0x8e/0xa0
     [<ffffffff8136ba74>] kernel_thread_helper+0x4/0x10
     [<ffffffff8136a199>] ? retint_restore_args+0xe/0xe
     [<ffffffff81047d00>] ? __init_kthread_worker+0x70/0x70
     [<ffffffff8136ba70>] ? gs_change+0xb/0xb
    Code: be e2 00 00 00 48 c7 c7 d1 2a 4e 81 e8 bf fb fd ff 48 8b 5d f0 4c 8b 65 f8 c9 c3 0f 1f 44 00 00 48 8b 87 08 02 00 00 55 48 89 e5 <48> 8b 40 f8 5d c3 66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00
    RIP  [<ffffffff8104801b>] kthread_data+0xb/0x20
     RSP <ffff8800072c1888>
    CR2: fffffffffffffff8
    ---[ end trace 996a332dc399111d ]---
    Fixing recursive fault but reboot is needed!
    Signed-off-by: NAnton Vorontsov <anton.vorontsov@linaro.org>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    521f7288
platform.c 7.4 KB