From: Ping-Ke Shih <pkshih@realtek.com>
To: Luka Gejak <luka.gejak@linux.dev>, Hungyu Lin <dennylin0707@gmail.com>
Cc: "linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"reza1234khan1234@gmail.com" <reza1234khan1234@gmail.com>
Subject: RE: [PATCH] wifi: rtw88: allow key removal when the CAM table is full
Date: Tue, 20 Oct 2026 05:29:07 +0000 [thread overview]
Message-ID: <4f48c50cab1145fd9dbd6df6d424c877@realtek.com> (raw)
In-Reply-To: <334c6e785a5d242c6f168d57d042d63b777a242a@linux.dev>
Luka Gejak <luka.gejak@linux.dev> wrote:
> Hi Ping-Ke,
>
> October 20, 2026 at 4:07 AM, "Ping-Ke Shih" <pkshih@realtek.com> wrote:
>
> >
> > Hungyu Lin <dennylin0707@gmail.com> wrote:
> >
> > >
> > > rtw_ops_set_key() looks for a free CAM entry before checking the
> > > command. When all pairwise entries are in use, DISABLE_KEY returns
> > > -ENOSPC without clearing the existing entry.
> > >
> > Is this the actual case you met?
> >
>
> From my investigation it seems reachable.
I knew. I just want to know if people encountered the problem, or
found and fixed this by reviewing.
>
> As far as I undersrand, it needs all 28 pairwise entries (4-31) in
> use at once, so AP mode with 28 secured stations (31 mac_ids are
> left after the AP vif), or IBSS/TDLS with as many peers. Not
> reachable as a plain client. Once it is hit its pairwise
> DISABLE_KEY fails, mac80211 frees the key anyway after logging
> "failed to remove key", the cam_map bit is never cleared, and the
> table stays full until the driver is reloaded.
>
> I think it can be tested with two clients by temporarily setting
> sec.total_cam_num = 6.
>
> > >
> > > Move the allocation and bounds check into SET_KEY. DISABLE_KEY uses
> > > the existing key->hw_key_idx.
> > >
> > > Fixes: 10d58823cb44 ("wifi: rtw88: fix out-of-bounds CAM write when key table is full")
> > >
> > Should it be ?
> >
> > Fixes: e3037485c68e ("rtw88: new Realtek 802.11ac driver")
> >
>
> I think 10d58823cb44 is the right tag. In e3037485c68e the check was
>
> if (hw_key_idx > sec->total_cam_num) {
>
> and rtw_sec_get_free_cam() returns at most RTW_MAX_SEC_CAM_NUM (32),
> which equals total_cam_num, so the check never fired and DISABLE_KEY
> always reached rtw_sec_clear_cam(). The bug there was the
> out-of-bounds SET_KEY, which 10d58823cb44 fixed. DISABLE_KEY only
> started failing once the check became ">=". This patch also does not
> apply without 10d58823cb44, since its context has the ">=".
I feel the initial commit e3037485c68e containing two bugs. One is
missing to check proper boundary, and the other is this one.
Without e3037485c68e, it will out-of-bounds SET_KEY, and then
it is possible to DISABLE_KEY fail (at wrong boundary), no?
Ping-Ke
next prev parent reply other threads:[~2026-10-20 5:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-19 16:51 [PATCH] wifi: rtw88: allow key removal when the CAM table is full Hungyu Lin
2026-10-19 19:01 ` Luka Gejak
2026-10-20 2:07 ` Ping-Ke Shih
2026-10-20 4:43 ` Luka Gejak
2026-10-20 5:29 ` Ping-Ke Shih [this message]
2026-10-20 8:28 ` Hungyu Lin
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=4f48c50cab1145fd9dbd6df6d424c877@realtek.com \
--to=pkshih@realtek.com \
--cc=dennylin0707@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=luka.gejak@linux.dev \
--cc=reza1234khan1234@gmail.com \
/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.