lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 28 Jul 2020 17:02:16 +0800
From:   kernel test robot <lkp@...el.com>
To:     Hans de Goede <hdegoede@...hat.com>
Cc:     Thomas Gleixner <tglx@...utronix.de>, linux-kernel@...r.kernel.org,
        LKP <lkp@...ts.01.org>
Subject: 17e5888e4e ("x86: Select HARDIRQS_SW_RESEND on x86"): [   12.158111]
 WARNING: possible circular locking dependency detected

Greetings,

0day kernel testing robot got the below dmesg and the first bad commit is

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master

commit 17e5888e4e180b45af7bafe7f3a86440d42717f3
Author:     Hans de Goede <hdegoede@...hat.com>
AuthorDate: Thu Jan 23 22:02:42 2020 +0100
Commit:     Thomas Gleixner <tglx@...utronix.de>
CommitDate: Wed Mar 11 22:39:39 2020 +0100

    x86: Select HARDIRQS_SW_RESEND on x86
    
    Modern x86 laptops are starting to use GPIO pins as interrupts more
    and more, e.g. touchpads and touchscreens have almost all moved away
    from PS/2 and USB to using I2C with a GPIO pin as interrupt.
    Modern x86 laptops also have almost all moved to using s2idle instead
    of using the system S3 ACPI power state to suspend.
    
    The Intel and AMD pinctrl drivers do not define irq_retrigger handlers
    for the irqchips they register, this is causing edge triggered interrupts
    which happen while suspended using s2idle to get lost.
    
    One specific example of this is the lid switch on some devices, lid
    switches used to be handled by the embedded-controller, but now the
    lid open/closed sensor is sometimes directly connected to a GPIO pin.
    On most devices the ACPI code for this looks like this:
    
    Method (_E00, ...) {
            Notify (LID0, 0x80) // Status Change
    }
    
    Where _E00 is an ACPI event handler for changes on both edges of the GPIO
    connected to the lid sensor, this event handler is then combined with an
    _LID method which directly reads the pin. When the device is resumed by
    opening the lid, the GPIO interrupt will wake the system, but because the
    pinctrl irqchip doesn't have an irq_retrigger handler, the Notify will not
    happen. This is not a problem in the case the _LID method directly reads
    the GPIO, because the drivers/acpi/button.c code will call _LID on resume
    anyways.
    
    But some devices have an event handler for the GPIO connected to the
    lid sensor which looks like this:
    
    Method (_E00, ...) {
            if (LID_GPIO == One)
                    LIDS = One
            else
                    LIDS = Zero
            Notify (LID0, 0x80) // Status Change
    }
    
    And the _LID method returns the cached LIDS value, since on open we
    do not re-run the edge-interrupt handler when we re-enable IRQS on resume
    (because of the missing irq_retrigger handler), _LID now will keep
    reporting closed, as LIDS was never changed to reflect the open status,
    this causes userspace to re-resume the laptop again shortly after opening
    the lid.
    
    The Intel GPIO controllers do not allow implementing irq_retrigger without
    emulating it in software, at which point we are better of just using the
    generic HARDIRQS_SW_RESEND mechanism rather then re-implementing software
    emulation for this separately in aprox. 14 different pinctrl drivers.
    
    Select HARDIRQS_SW_RESEND to solve the problem of edge-triggered GPIO
    interrupts not being re-triggered on resume when they were triggered during
    suspend (s2idle) and/or when they were the cause of the wakeup.
    
    This requires
    
     008f1d60fe25 ("x86/apic/vector: Force interupt handler invocation to irq context")
     c16816acd086 ("genirq: Add protection against unsafe usage of generic_handle_irq()")
    
    to protect the APIC based interrupts from being wreckaged by a software
    resend.
    
    Signed-off-by: Hans de Goede <hdegoede@...hat.com>
    Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
    Link: https://lkml.kernel.org/r/20200123210242.53367-1-hdegoede@redhat.com

87f2d1c662  genirq/irqdomain: Check pointer in irq_domain_alloc_irqs_hierarchy()
17e5888e4e  x86: Select HARDIRQS_SW_RESEND on x86
92ed301919  Linux 5.8-rc7
+---------------------------------------------------------------+------------+------------+----------+
|                                                               | 87f2d1c662 | 17e5888e4e | v5.8-rc7 |
+---------------------------------------------------------------+------------+------------+----------+
| boot_successes                                                | 93         | 15         | 11       |
| boot_failures                                                 | 39         | 25         | 3        |
| WARNING:suspicious_RCU_usage                                  | 38         | 10         |          |
| net/ipv4/fib_trie.c:#RCU-list_traversed_in_non-reader_section | 38         | 10         |          |
| invoked_oom-killer:gfp_mask=0x                                | 1          |            |          |
| Mem-Info                                                      | 1          |            |          |
| WARNING:possible_circular_locking_dependency_detected         | 0          | 15         | 3        |
+---------------------------------------------------------------+------------+------------+----------+

If you fix the issue, kindly add following tag
Reported-by: kernel test robot <lkp@...el.com>

[   12.156126] ALSA device list:
[   12.156425]   #0: Dummy 1
[   12.156679]   #1: Loopback 1
[   12.157322] 
[   12.157531] ======================================================
[   12.158111] WARNING: possible circular locking dependency detected
[   12.158694] 5.6.0-rc4-00010-g17e5888e4e180 #1 Not tainted
[   12.159215] ------------------------------------------------------
[   12.159795] swapper/1 is trying to acquire lock:
[   12.160230] c0011e70 (&irq_desc_lock_class){-.-.}, at: __irq_get_desc_lock+0x41/0x70
[   12.160961] 
[   12.160961] but task is already holding lock:
[   12.161580] c3326f90 (&port_lock_key){-.-.}, at: serial8250_do_startup+0x527/0x730
[   12.162277] 
[   12.162277] which lock already depends on the new lock.
[   12.162277] 
[   12.163030] 
[   12.163030] the existing dependency chain (in reverse order) is:
[   12.163728] 
[   12.163728] -> #3 (&port_lock_key){-.-.}:
[   12.164249]        arch_stack_walk+0x52/0x90
[   12.164656]        __lock_acquire+0xdbf/0x1160
[   12.165070]        lock_acquire+0x9a/0x130
[   12.165455]        serial8250_console_write+0x74/0x230
[   12.165934]        _raw_spin_lock_irqsave+0x28/0x40
[   12.166387]        serial8250_console_write+0x74/0x230
[   12.166862]        serial8250_console_write+0x74/0x230
[   12.167348]        console_unlock+0x172/0x5d0
[   12.167755]        univ8250_console_write+0x0/0x40
[   12.168198]        console_unlock+0x373/0x5d0
[   12.168604]        register_console+0x37e/0x3b0
[   12.169024]        univ8250_console_match+0x0/0x100
[   12.169511]        register_console+0x1f2/0x3b0
[   12.169955]        univ8250_console_init+0x0/0x20
[   12.170422]        univ8250_console_init+0x1d/0x20
[   12.170866]        console_init+0x131/0x1c9
[   12.171261]        start_kernel+0x4fc/0x603
[   12.175485]        startup_32_smp+0x164/0x170
[   12.175890] 
[   12.175890] -> #2 (console_owner){-.-.}:
[   12.176393]        check_usage_forwards+0x0/0x120
[   12.176828]        __lock_acquire+0xdbf/0x1160
[   12.177238]        lock_acquire+0x9a/0x130
[   12.177619]        console_unlock+0x172/0x5d0
[   12.178021]        console_unlock+0x1c4/0x5d0
[   12.178424]        console_unlock+0x172/0x5d0
[   12.178827]        vprintk_emit+0xd6/0x290
[   12.179221]        vprintk_default+0xf/0x20
[   12.179611]        printk+0xd/0xe
[   12.179925]        mask_and_ack_8259A.cold+0xb/0x5d
[   12.180376]        handle_level_irq+0x24/0x100
[   12.180788]        resend_irqs+0x4b/0x60
[   12.181156]        tasklet_action_common+0x3c/0x80
[   12.181726]        __do_softirq+0xd2/0x440
[   12.182111]        __do_softirq+0x0/0x440
[   12.182488]        do_softirq_own_stack+0x1d/0x30
[   12.182928]        irq_exit+0x66/0x80
[   12.183280]        do_IRQ+0x59/0xe0
[   12.183607]        common_interrupt+0x113/0x120
[   12.184028]        memset+0xa/0x10
[   12.184347]        memset+0xa/0x10
[   12.184668]        kmem_cache_alloc+0x21c/0x2c0
[   12.185088]        __kernfs_new_node+0x3b/0x180
[   12.185508]        __lock_acquire+0x8f5/0x1160
[   12.185918]        __lock_acquire+0x8f5/0x1160
[   12.186329]        kernfs_new_node+0x27/0x50
[   12.186724]        kernfs_create_dir_ns+0x1e/0x60
[   12.187158]        sysfs_create_dir_ns+0x47/0x90
[   12.187592]        kobject_add_internal+0xa4/0x310
[   12.188032]        kobject_init_and_add+0x36/0x40
[   12.188467]        bus_add_driver+0x7d/0x200
[   12.188863]        i2c_device_shutdown+0x0/0x30
[   12.189280]        i2c_device_shutdown+0x0/0x30
[   12.189697]        driver_register+0x4e/0xd0
[   12.190099]        i2c_register_driver+0x39/0x90
[   12.190526]        rcu_read_lock_sched_held+0x3f/0x70
[   12.190992]        ds1621_driver_init+0x0/0xc
[   12.191403]        do_one_initcall+0x5f/0x250
[   12.191897]        parse_args+0x1bf/0x310
[   12.192270]        rcu_read_lock_sched_held+0x3f/0x70
[   12.192741]        kernel_init_freeable+0x12d/0x24a
[   12.193194]        kernel_init_freeable+0x1e9/0x24a
[   12.193647]        kernel_init+0x0/0xe5
[   12.194006]        kernel_init+0x6/0xe5
[   12.194362]        kernel_init+0x0/0xe5
[   12.194719]        ret_from_fork+0x19/0x30
[   12.195098] 
[   12.195098] -> #1 (i8259A_lock){-.-.}:
[   12.195663]        __lock_acquire+0xdbf/0x1160
[   12.196166]        lock_acquire+0x9a/0x130
[   12.196628]        unmask_8259A_irq+0x16/0x60
[   12.197126]        _raw_spin_lock_irqsave+0x28/0x40
[   12.197670]        unmask_8259A_irq+0x16/0x60
[   12.198084]        unmask_8259A_irq+0x16/0x60
[   12.198486]        irq_enable+0x27/0x60
[   12.198840]        irq_startup+0x89/0xa0
[   12.199231]        __setup_irq+0x64e/0x6e0
[   12.199609]        setup_irq+0x39/0x80
[   12.199960]        start_kernel+0x48f/0x603
[   12.200345]        startup_32_smp+0x164/0x170
[   12.200745] 
[   12.200745] -> #0 (&irq_desc_lock_class){-.-.}:
[   12.201297]        print_circular_bug+0x4d/0xa0
[   12.203541]        check_noncircular+0x116/0x140
[   12.203975]        check_prev_add+0x6c/0x930
[   12.204375]        check_noncircular+0x60/0x140
[   12.204798]        __lock_acquire+0xdbf/0x1160
[   12.205214]        lock_acquire+0x9a/0x130
[   12.205602]        __irq_get_desc_lock+0x41/0x70
[   12.206037]        _raw_spin_lock_irqsave+0x28/0x40
[   12.206493]        __irq_get_desc_lock+0x41/0x70
[   12.206925]        __irq_get_desc_lock+0x41/0x70
[   12.207367]        __disable_irq_nosync+0x13/0x60
[   12.207809]        serial8250_do_startup+0x628/0x730
[   12.208275]        uart_port_startup+0xcd/0x250
[   12.208700]        uart_port_activate+0x5b/0xa0
[   12.209124]        tty_port_open+0x64/0xb0
[   12.209511]        _raw_spin_unlock+0x16/0x20
[   12.209920]        uart_open+0x12/0x20
[   12.210273]        tty_open+0xcb/0x450
[   12.210628]        chrdev_open+0x5a/0x170
[   12.211006]        do_dentry_open+0x1a3/0x380
[   12.211497]        chrdev_open+0x0/0x170
[   12.211866]        do_last+0x386/0x860
[   12.212217]        path_openat+0x73/0x1f0
[   12.212590]        do_filp_open+0x58/0xb0
[   12.212963]        _raw_spin_unlock+0x16/0x20
[   12.213368]        __alloc_fd+0xbe/0x1b0
[   12.213734]        do_sys_openat2+0x1ef/0x280
[   12.214138]        do_sys_open+0x49/0x80
[   12.214502]        console_on_rootfs+0x16/0x2d
[   12.214923]        kernel_init_freeable+0x206/0x24a
[   12.215361]        kernel_init+0x0/0xe5
[   12.215699]        kernel_init+0x6/0xe5
[   12.216038]        kernel_init+0x0/0xe5
[   12.216378]        ret_from_fork+0x19/0x30
[   12.216738] 
[   12.216738] other info that might help us debug this:
[   12.216738] 
[   12.217432] Chain exists of:
[   12.217432]   &irq_desc_lock_class --> console_owner --> &port_lock_key
[   12.217432] 
[   12.218380]  Possible unsafe locking scenario:
[   12.218380] 
[   12.218895]        CPU0                    CPU1
[   12.219301]        ----                    ----
[   12.219697]   lock(&port_lock_key);
[   12.220005]                                lock(console_owner);
[   12.220551]                                lock(&port_lock_key);
[   12.221099]   lock(&irq_desc_lock_class);
[   12.221805] 
[   12.221805]  *** DEADLOCK ***
[   12.221805] 
[   12.222353] 3 locks held by swapper/1:
[   12.222703]  #0: f6c8e8d4 (&tty->legacy_mutex){+.+.}, at: tty_init_dev+0x34/0x170
[   12.223402]  #1: c02c7954 (&port->mutex){+.+.}, at: tty_port_open+0x40/0xb0
[   12.224009]  #2: c3326f90 (&port_lock_key){-.-.}, at: serial8250_do_startup+0x527/0x730
[   12.224706] 
[   12.224706] stack backtrace:
[   12.225092] CPU: 0 PID: 1 Comm: swapper Not tainted 5.6.0-rc4-00010-g17e5888e4e180 #1
[   12.225780] Call Trace:
[   12.226003]  ? check_noncircular+0x116/0x140
[   12.226380]  ? check_prev_add+0x6c/0x930
[   12.226771]  ? check_noncircular+0x60/0x140
[   12.227157]  ? __lock_acquire+0xdbf/0x1160
[   12.227543]  ? lock_acquire+0x9a/0x130
[   12.227892]  ? __irq_get_desc_lock+0x41/0x70
[   12.228289]  ? _raw_spin_lock_irqsave+0x28/0x40
[   12.228708]  ? __irq_get_desc_lock+0x41/0x70
[   12.229102]  ? __irq_get_desc_lock+0x41/0x70
[   12.229497]  ? __disable_irq_nosync+0x13/0x60
[   12.229900]  ? serial8250_do_startup+0x628/0x730
[   12.230323]  ? uart_port_startup+0xcd/0x250
[   12.230708]  ? uart_port_activate+0x5b/0xa0
[   12.231094]  ? tty_port_open+0x64/0xb0
[   12.231642]  ? _raw_spin_unlock+0x16/0x20
[   12.232017]  ? uart_open+0x12/0x20
[   12.232334]  ? tty_open+0xcb/0x450
[   12.232653]  ? chrdev_open+0x5a/0x170
[   12.232999]  ? do_dentry_open+0x1a3/0x380
[   12.233374]  ? cdev_init+0x50/0x50
[   12.233692]  ? do_last+0x386/0x860
[   12.234010]  ? path_openat+0x73/0x1f0
[   12.234351]  ? do_filp_open+0x58/0xb0
[   12.234691]  ? _raw_spin_unlock+0x16/0x20
[   12.235062]  ? __alloc_fd+0xbe/0x1b0
[   12.235404]  ? do_sys_openat2+0x1ef/0x280
[   12.235777]  ? do_sys_open+0x49/0x80
[   12.236109]  ? console_on_rootfs+0x16/0x2d
[   12.236491]  ? kernel_init_freeable+0x206/0x24a
[   12.236908]  ? rest_init+0x17b/0x17b
[   12.237239]  ? kernel_init+0x6/0xe5
[   12.237562]  ? rest_init+0x17b/0x17b
[   12.237894]  ? ret_from_fork+0x19/0x30
[   12.238643] Freeing unused kernel image (initmem) memory: 540K
[   12.239343] Write protecting kernel text and read-only data: 24424k
[   12.239944] rodata_test: all tests were successful
[   12.240400] Run /init as init process
[   12.240751]   with arguments:

                                                          # HH:MM RESULT GOOD BAD GOOD_BUT_DIRTY DIRTY_NOT_BAD
git bisect start v5.7 v5.6 --
git bisect  bad ceb1adbacb4971cd47533d667f91ed06a38d7d4a  # 23:43  B     11     2    0   0  Merge tag 'mtd/fixes-for-5.7-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux
git bisect  bad 6f43bae38269a55534e1f86a9917318167de6639  # 00:04  B      3     1    0   0  Merge tag 'dma-mapping-5.7' of git://git.infradead.org/users/hch/dma-mapping
git bisect  bad dfabb077d62552797ca0ae7756cb30d3e195ead5  # 00:13  B      2     1    1   1  Merge tag 'mmc-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc
git bisect good 642e53ead6aea8740a219ede509a5d138fd4f780  # 00:23  G     40     0   13  13  Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
git bisect  bad 9589351ccf47a85a75180a430627c16bc28da929  # 00:34  B      0     1   17   0  Merge branch 'x86-boot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
git bisect  bad 2853d5fafb1e21707e89aa2e227c90bb2c1ea4a9  # 00:44  B     12     1    3   3  Merge tag 'x86-splitlock-2020-03-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
git bisect  bad 992a1a3b45b5c0b6e69ecc2a3f32b0d02da28d58  # 01:06  B      2     2    1   1  Merge tag 'smp-core-2020-03-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
git bisect good 673b41e04a035d760bc0aff83fa9ee24fd9c2779  # 01:43  G     40     0    8   8  staging/octeon: fix up merge error
git bisect  bad 2d385336afcc43732aef1d51528c03f177ecd54e  # 01:51  B      0     1   17   0  Merge tag 'irq-core-2020-03-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
git bisect good 00760d3cd9de2ccee6b73e30b53e71704a99209e  # 02:11  G     37     0    9   9  irqchip/stm32: Retrigger both in eoi and unmask callbacks
git bisect good 771df8cf0bc3a9a94bc16a58da136cad186cea27  # 02:28  G     40     0   13  13  Merge branch 'irq/gic-v4.1' into irq/irqchip-next
git bisect good 9ae0522537852408f0f48af888e44d6876777463  # 02:56  G     37     0   15  15  PCI/AER: Fix the broken interrupt injection
git bisect  bad e13b99f3005829acc64287271fa6cacec6e3aeab  # 03:07  B      2     1    0   0  c6x: Replace setup_irq() by request_irq()
git bisect  bad 17e5888e4e180b45af7bafe7f3a86440d42717f3  # 03:21  B      1     1    0   0  x86: Select HARDIRQS_SW_RESEND on x86
git bisect good 87f2d1c662fa1761359fdf558246f97e484d177a  # 03:48  G     38     0   12  12  genirq/irqdomain: Check pointer in irq_domain_alloc_irqs_hierarchy()
# first bad commit: [17e5888e4e180b45af7bafe7f3a86440d42717f3] x86: Select HARDIRQS_SW_RESEND on x86
git bisect good 87f2d1c662fa1761359fdf558246f97e484d177a  # 04:11  G    113     0   26  38  genirq/irqdomain: Check pointer in irq_domain_alloc_irqs_hierarchy()
# extra tests with debug options
git bisect  bad 17e5888e4e180b45af7bafe7f3a86440d42717f3  # 04:24  B      3     1    1   1  x86: Select HARDIRQS_SW_RESEND on x86
# extra tests on head commit of linus/master
git bisect  bad 92ed301919932f777713b9172e525674157e983d  # 04:24  B      0     3   20   0  Linux 5.8-rc7
# bad: [92ed301919932f777713b9172e525674157e983d] Linux 5.8-rc7
# extra tests on revert first bad commit
git bisect good f58225ec2998b6ce80864fcb609b369eac45c36c  # 04:55  G     37     0    1   1  Revert "x86: Select HARDIRQS_SW_RESEND on x86"
# good: [f58225ec2998b6ce80864fcb609b369eac45c36c] Revert "x86: Select HARDIRQS_SW_RESEND on x86"
# extra tests on linus/master
# duplicated: [92ed301919932f777713b9172e525674157e983d] Linux 5.8-rc7
# extra tests on linux-next/master
# 119: [e9a523ff8f76de0768857f02ea76437d3b39d151] Add linux-next specific files for 20200727

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/lkp@lists.01.org

Download attachment "dmesg-quantal-vm-quantal-9:20200728032859:i386-randconfig-r034-20200727:5.6.0-rc4-00010-g17e5888e4e180:1.gz" of type "application/gzip" (25452 bytes)

Download attachment "dmesg-quantal-vm-quantal-13:20200728040454:i386-randconfig-r034-20200727:5.6.0-rc4-00009-g87f2d1c662fa1:1.gz" of type "application/gzip" (23934 bytes)

View attachment "reproduce-quantal-vm-quantal-9:20200728032859:i386-randconfig-r034-20200727:5.6.0-rc4-00010-g17e5888e4e180:1" of type "text/plain" (1179 bytes)

Download attachment "04b7e575e6be598b8d358b42d6f59447a94831c1:gcc-9:i386-randconfig-r034-20200727:WARNING:possible_circular_locking_dependency_detected.xz" of type "application/x-xz" (20072 bytes)

View attachment "config-5.6.0-rc4-00010-g17e5888e4e180" of type "text/plain" (125715 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ