Re: [PATCH v5 0/6] wifi: rtw88: preparations for RTL8723B/RTL8723BS

Peter Robinson <[email protected]>
Newsgroups org.kernel.vger.linux-wireless,org.kernel.vger.linux-kernel
Message-ID <CALeDE9NmBpsBdVHYuzahgrxKtvzxs-ML1netc7OMOEMQ8j5+vg@mail.gmail.com>
Hi Luka,

On Thu, 20 Aug 2026 at 10:02, Luka Gejak <[email protected]> wrote:
>
> On August 14, 2026 12:53:20 PM GMT+02:00, [email protected] wrote:
> >From: Luka Gejak <[email protected]>
> >
> >This is the first of two series adding support for the Realtek RTL8723B
> >802.11n chipset and its RTL8723BS SDIO variant to rtw88. It contains
> >only the changes to the shared rtw88 core that the chip driver depends
> >on. The chip itself, the build glue and the MAINTAINERS entry are a
> >second series.
> >
>
> ...
>
> Hi Ping-Ke,
>
> Please do not apply patches 4 and 6 of v6. I found real bugs in both
> after posting and a v7 is on the way.
>
> Patch 6 touches the skb after handing it to the TX worker:
>
>         skb_queue_tail(&rtwsdio->tx_queue[queue], skb);
>
>         rtw_sdio_8723bs_stop_tx_queue(rtwdev, queue,
>                                       skb_get_queue_mapping(skb));
>
> The worker can dequeue, transmit and free that skb before the second
> statement runs, so reading it there is a use after free. v7 reads the
> queue index into a local before the enqueue.
>
> Patch 4 concerns you more than me. It passed the padded size to
> rtw_sdio_get_tx_addr(), where upstream passes skb->len. That value is
> encoded into the CMD53 address as the transfer length, so on every other
> SDIO chip the encoded length changed whenever sdio_align_size() padded.
> For the RTL8723BS both expressions are the same value, so the change
> bought this chip nothing and only affected the other parts. The padding
> itself also ran on the generic path, giving those chips an allocation
> and an -ENOMEM path they did not have. v7 restores skb->len and gates
> the padding on the chip.
>
> The other v7 changes, all in patches 4 and 6:
>
>   - the free page check, the output queue wait and the accounting are
>     serialised. The TX worker and the H2C path both reach
>     rtw_sdio_write_port(), and two writers could each pass the checks
>     and claim the same pages and output queue entry, after which the
>     chip discards one transfer silently. The vendor driver has one
>     transmit thread and never needed this.
>   - the padding called skb_put_zero() after checking only tailroom, so a
>     cloned skb had its shared buffer written. It uses __skb_pad() now.
>   - the back-pressure stop could race the drain: the worker could empty
>     the queue while the stop was still in progress, see the flag clear,
>     and never wake it, leaving an access category stopped with nothing
>     left to wake it.
>
> Patches 1, 2, 3 and 5 are unchanged and keep your acks; patch 5 shifts
> only by hunk offsets because patch 4 grew above it. I dropped your ack
> from patch 4, since the rework is too substantive to carry it.
>
> Most of these came from Sashiko's automated review of v6. I checked each
> against the code before acting on it, and one of its eight findings did
> not hold up.
>
> v7 follows shortly. It is hardware tested: 60 idle pings at 0% loss with
> power save on, bidirectional load with no stall, 19.6 Mbit/s up and 36.8
> down, UDP at 0% loss, three scans, three reconnects and a clean log.

I had done some basic testing with v5, and had left a v6 to build
overnight. I'll grab this shortly and do a build with v7 and do some
testing.It was generally looking stable on the Pine64+ board I was
using for testing.

I think I may also have a device(s) with a 8723cs and/or a 8723ds I
can possibly test with, I'll see if I can remember/find it over the
weekend and get it running for some testing of that too.

Peter
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.