On 03/09/2026 at 20:32:01 +08, Xuanqiang Luo <[email protected]> wrote:

> From: Xuanqiang Luo <[email protected]>
>
> queue_work() coalesces attempts to queue an already pending work item.
> The RX workers, however, consume only one descriptor per invocation. A
> burst can therefore leave later descriptors queued until another frame
> arrives, while the final descriptor may remain queued indefinitely.
>
> The RX tasklet, workers, and scan cleanup also access the descriptor
> lists without synchronization.
>
> Protect both lists with a spinlock. Publish each descriptor and queue its
> work while holding the lock. Remove each descriptor from the list before
> processing it and, if another descriptor remains, queue the work again so
> it runs after the current invocation.
>
> Fixes: 57588c71177f ("mac802154: Handle passive scanning")
> Fixes: d021d218f6d9 ("mac802154: Handle received BEACON_REQ")
> Cc: [email protected]
> Signed-off-by: Xuanqiang Luo <[email protected]>

Reviewed-by: Miquel Raynal <[email protected]>

Reply via email to