rtmutex: Use waiter::task instead of current in remove_waiter()

Note: This data is for reference and cybersecurity research purposes only.CyStack advises users not to use this information for unlawful purposes.

Analyzing data...

Overview

Original source data

In the Linux kernel, the following vulnerability has been resolved:

rtmutex: Use waiter::task instead of current in remove_waiter()

remove_waiter() is used by the slowlock paths, but it is also used for proxy-lock rollback in rt_mutex_start_proxy_lock() when invoked from futex_requeue().

In the latter case waiter::task is not current, but remove_waiter() operates on current for the dequeue operation. That results in several problems:

  1. the rbtree dequeue happens without waiter::task::pi_lock being held

  2. the waiter task's pi_blocked_on state is not cleared, which leaves a dangling pointer primed for UAF around.

  3. rt_mutex_adjust_prio_chain() operates on the wrong top priority waiter task

Use waiter::task instead of current in all related operations in remove_waiter() to cure those problems.

[ tglx: Fixup rt_mutex_adjust_prio_chain(), add a comment and amend the changelog ]

Affected products and scope

Analyzing data...

Technical details

Analyzing data...

Exploitability

Analyzing data...

Technical impact

Analyzing data...

Business impact

Analyzing data...

Remediation

Analyzing data...

Detection

Analyzing data...
Sources (17)
Learn more

Run an in-depth assessment with complete web risk management

CyStack VulnScan continuously discovers assets, validates vulnerabilities, and helps security teams prioritize remediation across the organization.

Explore CyStack VulnScan