| From 0fada277147ffc6d694aa32162f51198d4f10d94 Mon Sep 17 00:00:00 2001 |
| From: Jamie Iles <jamie@nuviainc.com> |
| Date: Mon, 12 Oct 2020 14:04:46 +0100 |
| Subject: ACPI: debug: don't allow debugging when ACPI is disabled |
| |
| From: Jamie Iles <jamie@nuviainc.com> |
| |
| commit 0fada277147ffc6d694aa32162f51198d4f10d94 upstream. |
| |
| If ACPI is disabled then loading the acpi_dbg module will result in the |
| following splat when lock debugging is enabled. |
| |
| DEBUG_LOCKS_WARN_ON(lock->magic != lock) |
| WARNING: CPU: 0 PID: 1 at kernel/locking/mutex.c:938 __mutex_lock+0xa10/0x1290 |
| Kernel panic - not syncing: panic_on_warn set ... |
| CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.9.0-rc8+ #103 |
| Hardware name: linux,dummy-virt (DT) |
| Call trace: |
| dump_backtrace+0x0/0x4d8 |
| show_stack+0x34/0x48 |
| dump_stack+0x174/0x1f8 |
| panic+0x360/0x7a0 |
| __warn+0x244/0x2ec |
| report_bug+0x240/0x398 |
| bug_handler+0x50/0xc0 |
| call_break_hook+0x160/0x1d8 |
| brk_handler+0x30/0xc0 |
| do_debug_exception+0x184/0x340 |
| el1_dbg+0x48/0xb0 |
| el1_sync_handler+0x170/0x1c8 |
| el1_sync+0x80/0x100 |
| __mutex_lock+0xa10/0x1290 |
| mutex_lock_nested+0x6c/0xc0 |
| acpi_register_debugger+0x40/0x88 |
| acpi_aml_init+0xc4/0x114 |
| do_one_initcall+0x24c/0xb10 |
| kernel_init_freeable+0x690/0x728 |
| kernel_init+0x20/0x1e8 |
| ret_from_fork+0x10/0x18 |
| |
| This is because acpi_debugger.lock has not been initialized as |
| acpi_debugger_init() is not called when ACPI is disabled. Fail module |
| loading to avoid this and any subsequent problems that might arise by |
| trying to debug AML when ACPI is disabled. |
| |
| Fixes: 8cfb0cdf07e2 ("ACPI / debugger: Add IO interface to access debugger functionalities") |
| Reviewed-by: Hanjun Guo <guohanjun@huawei.com> |
| Signed-off-by: Jamie Iles <jamie@nuviainc.com> |
| Cc: 4.10+ <stable@vger.kernel.org> # 4.10+ |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/acpi/acpi_dbg.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/drivers/acpi/acpi_dbg.c |
| +++ b/drivers/acpi/acpi_dbg.c |
| @@ -749,6 +749,9 @@ static int __init acpi_aml_init(void) |
| { |
| int ret; |
| |
| + if (acpi_disabled) |
| + return -ENODEV; |
| + |
| /* Initialize AML IO interface */ |
| mutex_init(&acpi_aml_io.lock); |
| init_waitqueue_head(&acpi_aml_io.wait); |