CVE-2026-53204: firmware: stratix10-rsu: Fix NULL deref on rsu_send_msg() timeout in probe
In the Linux kernel, the following vulnerability has been resolved:
firmware: stratix10-rsu: Fix NULL deref on rsusendmsg() timeout in probe
rsusendmsg() can return -ETIMEDOUT when waitforcompletioninterruptibletimeout() fires while the SMC call is still pending. In stratix10rsuprobe(), the error paths for COMMANDRSUDCMFVERSION, COMMANDRSUDCMFSTATUS, COMMANDRSUMAXRETRY and COMMANDRSUGETSPTTABLE call stratix10svcfreechannel() - which sets chan->scl to NULL - but then fall through and queue the next request on the same channel. The next svc kthread that runs will dereference pdata->chan->scl in its receive callback path, triggering a NULL pointer dereference identical to the one fixed by commit c45f7263100c ("firmware: stratix10-rsu: Fix NULL pointer dereference when RSU is disabled") for the COMMANDRSUSTATUS path.
Apply the same cleanup pattern to the remaining failure paths: remove the async client, free the channel, and return early so no further messages are queued on a channel whose scl has been cleared.
While at it, clean up stratix10rsuprobe() in two ways without changing behavior:
- Drop redundant zero-initialization of fields already cleared by devmkzalloc(): client.receivecb, status. and spt0/1address (INVALIDSPTADDRESS is 0x0).
- Replace five identical 3-line error-cleanup blocks (stratix10svcremoveasyncclient() + stratix10svcfreechannel() + return ret) with goto labels (removeasyncclient, freechannel), matching the standard kernel resource-unwinding pattern and making it easier to extend the probe sequence without forgetting matching cleanup.
Also move initcompletion() next to mutexinit() so sync-primitive initialization is grouped before anything that could trigger a callback.
--- v2: Add a minor clean-up of the function stratix10rsuprobe() to have a centralize exit for all the rsusendasyncmsg() and rsusendmsg().
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Patch c45f7263100c - Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Patch firmware: stratix10-rsu: Fix NULL pointer dereference - Compensating control
If stratix10-rsu is disabled in your kernel configuration, ensure RSU is disabled to avoid the probe/request path that can dereference pdata->chan->scl in async receive callbacks when the channel has been freed/cleared.
Event History
Frequently Asked Questions
What conditions are required to trigger this issue?
An attacker or local user needs local access and low privileges. The failure occurs when an RSU message times out during stratix10_rsu_probe() while the associated SMC call remains pending, after which another request is queued on a channel whose scl pointer was cleared.
What is the practical impact?
The vulnerable receive callback can dereference a NULL pointer, causing a kernel crash or denial of service. The supplied CVSS vector indicates no confidentiality or integrity impact.
Which probe requests are involved?
The affected error paths are for COMMAND_RSU_DCMF_VERSION, COMMAND_RSU_DCMF_STATUS, COMMAND_RSU_MAX_RETRY, and COMMAND_RSU_GET_SPT_TABLE. The issue is distinct from the previously fixed COMMAND_RSU_STATUS path.
What does the fix change?
On these timeout-related failure paths, the fix removes the asynchronous client, frees the channel, and returns immediately. This prevents subsequent messages from being queued after stratix10_svc_free_channel() has set chan->scl to NULL.