drivers/net/ethernet/qlogic/qede/qede_fp.c:989 qede_tpa_end() error: testing array offset 'i' after use.
From: Dan Carpenter
Date: Fri Mar 06 2026 - 02:24:34 EST
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 5ee8dbf54602dc340d6235b1d6aa17c0f283f48c
commit: 896f1a2493b59beb2b5ccdf990503dbb16cb2256 net: qlogic/qede: fix potential out-of-bounds read in qede_tpa_cont() and qede_tpa_end()
config: mips-randconfig-r071-20260306 (https://download.01.org/0day-ci/archive/20260306/202603060852.8GvwVQFk-lkp@xxxxxxxxx/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project c32caeec8158d634bb71ab8911a6031248b9fc47)
smatch: v0.5.0-9004-gb810ac53
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
| Closes: https://lore.kernel.org/r/202603060852.8GvwVQFk-lkp@xxxxxxxxx/
smatch warnings:
drivers/net/ethernet/qlogic/qede/qede_fp.c:989 qede_tpa_end() error: testing array offset 'i' after use.
drivers/net/ethernet/qlogic/qede/qede_fp.c:964 qede_tpa_cont() error: testing array offset 'i' after use.
vim +/i +989 drivers/net/ethernet/qlogic/qede/qede_fp.c
cdda926d409869 Mintz, Yuval 2017-01-01 958 static inline void qede_tpa_cont(struct qede_dev *edev,
cdda926d409869 Mintz, Yuval 2017-01-01 959 struct qede_rx_queue *rxq,
cdda926d409869 Mintz, Yuval 2017-01-01 960 struct eth_fast_path_rx_tpa_cont_cqe *cqe)
cdda926d409869 Mintz, Yuval 2017-01-01 961 {
cdda926d409869 Mintz, Yuval 2017-01-01 962 int i;
cdda926d409869 Mintz, Yuval 2017-01-01 963
896f1a2493b59b Pavel Zhigulin 2025-11-13 @964 for (i = 0; cqe->len_list[i] && i < ARRAY_SIZE(cqe->len_list); i++)
Flip this around check if "i" is within bounds first before checking if
cqe->len_list[i] is non-zero.
for (i = 0; i < ARRAY_SIZE(cqe->len_list) && cqe->len_list[i]; i++)
cdda926d409869 Mintz, Yuval 2017-01-01 965 qede_fill_frag_skb(edev, rxq, cqe->tpa_agg_index,
cdda926d409869 Mintz, Yuval 2017-01-01 966 le16_to_cpu(cqe->len_list[i]));
cdda926d409869 Mintz, Yuval 2017-01-01 967
cdda926d409869 Mintz, Yuval 2017-01-01 968 if (unlikely(i > 1))
cdda926d409869 Mintz, Yuval 2017-01-01 969 DP_ERR(edev,
cdda926d409869 Mintz, Yuval 2017-01-01 970 "Strange - TPA cont with more than a single len_list entry\n");
cdda926d409869 Mintz, Yuval 2017-01-01 971 }
cdda926d409869 Mintz, Yuval 2017-01-01 972
10a0176e4e6eb6 Mintz, Yuval 2017-04-07 973 static int qede_tpa_end(struct qede_dev *edev,
cdda926d409869 Mintz, Yuval 2017-01-01 974 struct qede_fastpath *fp,
cdda926d409869 Mintz, Yuval 2017-01-01 975 struct eth_fast_path_rx_tpa_end_cqe *cqe)
cdda926d409869 Mintz, Yuval 2017-01-01 976 {
cdda926d409869 Mintz, Yuval 2017-01-01 977 struct qede_rx_queue *rxq = fp->rxq;
cdda926d409869 Mintz, Yuval 2017-01-01 978 struct qede_agg_info *tpa_info;
cdda926d409869 Mintz, Yuval 2017-01-01 979 struct sk_buff *skb;
cdda926d409869 Mintz, Yuval 2017-01-01 980 int i;
cdda926d409869 Mintz, Yuval 2017-01-01 981
cdda926d409869 Mintz, Yuval 2017-01-01 982 tpa_info = &rxq->tpa_info[cqe->tpa_agg_index];
cdda926d409869 Mintz, Yuval 2017-01-01 983 skb = tpa_info->skb;
cdda926d409869 Mintz, Yuval 2017-01-01 984
8a8633978b842c Manish Chopra 2018-05-17 985 if (tpa_info->buffer.page_offset == PAGE_SIZE)
8a8633978b842c Manish Chopra 2018-05-17 986 dma_unmap_page(rxq->dev, tpa_info->buffer.mapping,
8a8633978b842c Manish Chopra 2018-05-17 987 PAGE_SIZE, rxq->data_direction);
8a8633978b842c Manish Chopra 2018-05-17 988
896f1a2493b59b Pavel Zhigulin 2025-11-13 @989 for (i = 0; cqe->len_list[i] && i < ARRAY_SIZE(cqe->len_list); i++)
Same.
cdda926d409869 Mintz, Yuval 2017-01-01 990 qede_fill_frag_skb(edev, rxq, cqe->tpa_agg_index,
cdda926d409869 Mintz, Yuval 2017-01-01 991 le16_to_cpu(cqe->len_list[i]));
cdda926d409869 Mintz, Yuval 2017-01-01 992 if (unlikely(i > 1))
cdda926d409869 Mintz, Yuval 2017-01-01 993 DP_ERR(edev,
cdda926d409869 Mintz, Yuval 2017-01-01 994 "Strange - TPA emd with more than a single len_list entry\n");
cdda926d409869 Mintz, Yuval 2017-01-01 995
cdda926d409869 Mintz, Yuval 2017-01-01 996 if (unlikely(tpa_info->state != QEDE_AGG_STATE_START))
cdda926d409869 Mintz, Yuval 2017-01-01 997 goto err;
cdda926d409869 Mintz, Yuval 2017-01-01 998
cdda926d409869 Mintz, Yuval 2017-01-01 999 /* Sanity */
cdda926d409869 Mintz, Yuval 2017-01-01 1000 if (unlikely(cqe->num_of_bds != tpa_info->frag_id + 1))
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki