From: sashiko-bot@kernel.org
To: "Mahanta Jambigi" <mjambigi@linux.ibm.com>
Cc: "Vasily Gorbik" <gor@linux.ibm.com>,
linux-s390@vger.kernel.org, "Heiko Carstens" <hca@linux.ibm.com>,
"Alexander Gordeev" <agordeev@linux.ibm.com>
Subject: Re: [PATCH net] net/smc: fix qentry overwrite for CONFIRM_LINK and ADD_LINK_CONT in smc_llc_event_handler()
Date: Thu, 30 Jul 2026 13:02:50 +0000 [thread overview]
Message-ID: <20260730130250.F08B91F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260729130153.970800-1-mjambigi@linux.ibm.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
Pre-existing issues:
- [High] Spurious messages stashed in `qentry` during the `SMC_LLC_FLOW_REQ_ADD_LINK` state are deterministically leaked when transitioning to `ADD_LINK` or stopping the flow.
- [High] Lockless TOCTOU race in `qentry` validation allows concurrent softirq and workqueue to overwrite the pointer and leak memory.
- [High] Late duplicate messages bypass the `!qentry` guard and are subsequently leaked by `smc_llc_flow_stop()`.
--
--- Patch [1]: [PATCH net] net/smc: fix qentry overwrite for CONFIRM_LINK and ADD_LINK_CONT in smc_llc_event_handler() ---
commit 708ba737c6e1123f6d2c6447d7060356d5db40c0
Author: Mahanta Jambigi <mjambigi@linux.ibm.com>
net/smc: fix qentry overwrite for CONFIRM_LINK and ADD_LINK_CONT in smc_llc_event_handler()
This commit fixes a memory leak in the SMC LLC event handler by adding a
guard to check if flow->qentry is already set before storing a new message.
It targets the CONFIRM_LINK and ADD_LINK_CONT messages to prevent duplicate
messages from overwriting an existing qentry allocation.
> diff --git a/net/smc/smc_llc.c b/net/smc/smc_llc.c
> index 954b2ff1815c2..aa6d83af55eda 100644
> --- a/net/smc/smc_llc.c
> +++ b/net/smc/smc_llc.c
> @@ -1927,7 +1927,8 @@ static void smc_llc_event_handler(struct smc_llc_qentry *qentry)
> return;
> case SMC_LLC_CONFIRM_LINK:
> case SMC_LLC_ADD_LINK_CONT:
> - if (lgr->llc_flow_lcl.type != SMC_LLC_FLOW_NONE) {
> + if (lgr->llc_flow_lcl.type != SMC_LLC_FLOW_NONE &&
> + !lgr->llc_flow_lcl.qentry) {
[Severity: High]
This isn't a bug introduced by this patch, but can spurious messages stashed
during the SMC_LLC_FLOW_REQ_ADD_LINK state still leak?
If a peer sends an unexpected CONFIRM_LINK message while the client is in the
REQ_ADD_LINK state, the event handler stashes it here because the type is not
NONE and qentry is NULL. When the legitimate ADD_LINK request arrives,
smc_llc_event_handler() processes it and overwrites this stashed qentry via
smc_llc_flow_qentry_set() without freeing the previous one.
Alternatively, if an ADD_LINK response arrives, it calls smc_llc_flow_stop()
directly, which does a memset on the flow:
smc_llc_flow_stop() {
...
memset(flow, 0, sizeof(*flow));
...
}
Could this sequence leak the kmalloc-96 allocation?
[Severity: High]
This is a pre-existing issue, but does this lockless check introduce a TOCTOU
race if a duplicate packet arrives concurrently?
If a peer sends two duplicate CONFIRM_LINK messages concurrently, one with
the RESP flag clear (processed via smc_llc_event_handler in a workqueue)
and one with the RESP flag set (processed via smc_llc_rx_response in
softirq context), both contexts could locklessly evaluate !flow->qentry
as true.
They would then both call smc_llc_flow_qentry_set(), overwriting one of the
pointers and leaking the allocation.
[Severity: High]
This is a pre-existing issue, but does this guard fail to protect against
late duplicate messages?
When a legitimate CONFIRM_LINK is processed, the flow handler (for example,
smc_llc_cli_conf_link) calls smc_llc_flow_qentry_del(), which resets
flow->qentry to NULL and frees it. However, the flow->type remains active
while remaining hardware setup is performed.
If a duplicate CONFIRM_LINK arrives during this window, this check sees
type != NONE and !qentry, and erroneously stashes the duplicate. When the
flow eventually completes, smc_llc_flow_stop() unconditionally clears the
flow via memset(), leaking the newly stashed late-duplicate qentry.
> /* a flow is waiting for this message */
> smc_llc_flow_qentry_set(&lgr->llc_flow_lcl, qentry);
> wake_up(&lgr->llc_msg_waiter);
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260729130153.970800-1-mjambigi@linux.ibm.com?part=1
prev parent reply other threads:[~2026-07-30 13:02 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-29 13:01 [PATCH net] net/smc: fix qentry overwrite for CONFIRM_LINK and ADD_LINK_CONT in smc_llc_event_handler() Mahanta Jambigi
2026-07-30 13:02 ` sashiko-bot [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260730130250.F08B91F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=agordeev@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=linux-s390@vger.kernel.org \
--cc=mjambigi@linux.ibm.com \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.