Bug 1222800 (CVE-2024-26806) - VUL-0: CVE-2024-26806: kernel: spi: cadence-qspi: remove system-wide suspend helper calls from runtime PM hooks
Summary: VUL-0: CVE-2024-26806: kernel: spi: cadence-qspi: remove system-wide suspend ...
Status: RESOLVED FIXED
Alias: CVE-2024-26806
Product: SUSE Security Incidents
Classification: Novell Products
Component: Incidents (show other bugs)
Version: unspecified
Hardware: Other Other
: P5 - None : Normal
Target Milestone: ---
Assignee: Kernel Bugs
QA Contact: Security Team bot
URL: https://smash.suse.de/issue/400358/
Whiteboard: CVSSv3.1:SUSE:CVE-2024-26806:5.5:(AV:...
Keywords:
Depends on:
Blocks:
 
Reported: 2024-04-15 08:58 UTC by SMASH SMASH
Modified: 2024-04-16 08:26 UTC (History)
2 users (show)

See Also:
Found By: Security Response Team
Services Priority:
Business Priority:
Blocker: ---
Marketing QA Status: ---
IT Deployment: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description SMASH SMASH 2024-04-15 08:58:06 UTC
In the Linux kernel, the following vulnerability has been resolved:

spi: cadence-qspi: remove system-wide suspend helper calls from runtime PM hooks

The ->runtime_suspend() and ->runtime_resume() callbacks are not
expected to call spi_controller_suspend() and spi_controller_resume().
Remove calls to those in the cadence-qspi driver.

Those helpers have two roles currently:
 - They stop/start the queue, including dealing with the kworker.
 - They toggle the SPI controller SPI_CONTROLLER_SUSPENDED flag. It
   requires acquiring ctlr->bus_lock_mutex.

Step one is irrelevant because cadence-qspi is not queued. Step two
however has two implications:
 - A deadlock occurs, because ->runtime_resume() is called in a context
   where the lock is already taken (in the ->exec_op() callback, where
   the usage count is incremented).
 - It would disallow all operations once the device is auto-suspended.

Here is a brief call tree highlighting the mutex deadlock:

spi_mem_exec_op()
        ...
        spi_mem_access_start()
                mutex_lock(&ctlr->bus_lock_mutex)

        cqspi_exec_mem_op()
                pm_runtime_resume_and_get()
                        cqspi_resume()
                                spi_controller_resume()
                                        mutex_lock(&ctlr->bus_lock_mutex)
                ...

        spi_mem_access_end()
                mutex_unlock(&ctlr->bus_lock_mutex)
        ...

References:
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2024-26806
https://www.cve.org/CVERecord?id=CVE-2024-26806
https://git.kernel.org/stable/c/041562ebc4759c9932b59a06527f8753b86da365
https://git.kernel.org/stable/c/959043afe53ae80633e810416cee6076da6e91c6
https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2024/CVE-2024-26806.mbox
https://bugzilla.redhat.com/show_bug.cgi?id=2273419
Comment 1 Alexander Bergmann 2024-04-15 08:58:35 UTC
None of our SLE or openSUSE kernels is affected.