]> www.infradead.org Git - users/willy/linux.git/commitdiff
staging: rtl8723bs: Use % 4096 instead of & 0xfff
authorAbraham Samuel Adekunle <abrahamadekunle50@gmail.com>
Fri, 18 Apr 2025 09:47:55 +0000 (09:47 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 18 Apr 2025 10:40:15 +0000 (12:40 +0200)
The sequence number is constrained to a range of [0, 4095], which
is a total of 4096 values. The bitmask operation using `& 0xfff` is
used to perform this wrap-around. While this is functionally correct,
it obscures the intended semantic of a 4096-based wrap.

Using a modulo operation `% 4096u` makes the wrap-around logic
explicit and easier to understand. It clearly signals that the
sequence number cycles through a range of 4096 values.
It also makes the code robust against potential changes of the 4096
upper limit, especially when it becomes a non power-of-2 value while
the AND(&) works solely for power-of-2 values.

The use of `% 4096u` also guarantees that the modulo operation is
performed with unsigned arithmetic, preventing potential issues with
the signed types.

Found by Coccinelle.

Suggested-by: Andy Shevchenko <andy@kernel.org>
Suggested-by: David Laight <david.laight.linux@gmail.com>
Signed-off-by: Abraham Samuel Adekunle <abrahamadekunle50@gmail.com>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
Link: https://lore.kernel.org/r/e8d515539ba560961003eae15d301d03e6cdd17d.1744966511.git.abrahamadekunle50@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
drivers/staging/rtl8723bs/core/rtw_recv.c
drivers/staging/rtl8723bs/core/rtw_xmit.c

index 3d36b6f005e04f09346e67fba45434a73eeca835..e74fb7d5dc37f097c9c7aa65be133087d7615959 100644 (file)
@@ -3511,7 +3511,7 @@ void issue_action_BA(struct adapter *padapter, unsigned char *raddr, unsigned ch
                        /* if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.mac_address)) != NULL) */
                        psta = rtw_get_stainfo(pstapriv, raddr);
                        if (psta) {
-                               start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07]&0xfff) + 1;
+                               start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07] % 4096u) + 1;
 
                                psta->BA_starting_seqctrl[status & 0x07] = start_seq;
 
index 895116e9f4e78d10e756ba5a23b959797b723d1f..709a606be7c968704cf3cb21f8421e7438e19d65 100644 (file)
@@ -1641,7 +1641,7 @@ static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_n
        struct dvobj_priv *psdpriv = padapter->dvobj;
        struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
        u8 wsize = preorder_ctrl->wsize_b;
-       u16 wend = (preorder_ctrl->indicate_seq + wsize - 1) & 0xFFF;/*  4096; */
+       u16 wend = (preorder_ctrl->indicate_seq + wsize - 1) % 4096u;
 
        /*  Rx Reorder initialize condition. */
        if (preorder_ctrl->indicate_seq == 0xFFFF)
@@ -1657,7 +1657,7 @@ static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_n
        /*  2. Incoming SeqNum is larger than the WinEnd => Window shift N */
        /*  */
        if (SN_EQUAL(seq_num, preorder_ctrl->indicate_seq)) {
-               preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF;
+               preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) % 4096u;
 
        } else if (SN_LESS(wend, seq_num)) {
                /*  boundary situation, when seq_num cross 0xFFF */
@@ -1772,7 +1772,7 @@ static int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reor
                        list_del_init(&(prframe->u.hdr.list));
 
                        if (SN_EQUAL(preorder_ctrl->indicate_seq, pattrib->seq_num))
-                               preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF;
+                               preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) % 4096u;
 
                        /* Set this as a lock to make sure that only one thread is indicating packet. */
                        /* pTS->RxIndicateState = RXTS_INDICATE_PROCESSING; */
index dfee7b0e9abe97780491e84faf294b6adab6f3bc..026d58b4bd7feb1c4db083dcfd023b3d2e50314a 100644 (file)
@@ -943,7 +943,7 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
 
                        if (psta) {
                                psta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
-                               psta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
+                               psta->sta_xmitpriv.txseq_tid[pattrib->priority] %= 4096u;
                                pattrib->seqnum = psta->sta_xmitpriv.txseq_tid[pattrib->priority];
 
                                SetSeqNum(hdr, pattrib->seqnum);
@@ -964,12 +964,12 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
                                                pattrib->ampdu_en = false;/* AGG BK */
                                        } else if (SN_EQUAL(pattrib->seqnum, tx_seq)) {
                                                psta->BA_starting_seqctrl[pattrib->priority & 0x0f] =
-                                                       (tx_seq + 1) & 0xfff;
+                                                       (tx_seq + 1) % 4096u;
 
                                                pattrib->ampdu_en = true;/* AGG EN */
                                        } else {
                                                psta->BA_starting_seqctrl[pattrib->priority & 0x0f] =
-                                                       (pattrib->seqnum + 1) & 0xfff;
+                                                       (pattrib->seqnum + 1) % 4096u;
 
                                                pattrib->ampdu_en = true;/* AGG EN */
                                        }