[bug report] net: lan966x: add port module support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Horatiu Vultur,

The patch d28d6d2e37d1: "net: lan966x: add port module support" from
Nov 29, 2021, leads to the following Smatch static checker warning:

	drivers/net/ethernet/microchip/lan966x/lan966x_main.c:515 lan966x_xtr_irq_handler()
	warn: duplicate check 'sz < 0' (previous on line 502)

drivers/net/ethernet/microchip/lan966x/lan966x_main.c
    448 static irqreturn_t lan966x_xtr_irq_handler(int irq, void *args)
    449 {
    450         struct lan966x *lan966x = args;
    451         int i, grp = 0, err = 0;
    452 
    453         if (!(lan_rd(lan966x, QS_XTR_DATA_PRESENT) & BIT(grp)))
    454                 return IRQ_NONE;
    455 
    456         do {
    457                 struct net_device *dev;
    458                 struct sk_buff *skb;
    459                 int sz = 0, buf_len;
    460                 u64 src_port, len;
    461                 u32 ifh[IFH_LEN];
    462                 u32 *buf;
    463                 u32 val;
    464 
    465                 for (i = 0; i < IFH_LEN; i++) {
    466                         err = lan966x_rx_frame_word(lan966x, grp, &ifh[i]);
    467                         if (err != 4)
    468                                 goto recover;
    469                 }
    470 
    471                 err = 0;
    472 
    473                 lan966x_ifh_get_src_port(ifh, &src_port);
    474                 lan966x_ifh_get_len(ifh, &len);
    475 
    476                 WARN_ON(src_port >= lan966x->num_phys_ports);
    477 
    478                 dev = lan966x->ports[src_port]->dev;
    479                 skb = netdev_alloc_skb(dev, len);
    480                 if (unlikely(!skb)) {
    481                         netdev_err(dev, "Unable to allocate sk_buff\n");
    482                         err = -ENOMEM;
    483                         break;
    484                 }
    485                 buf_len = len - ETH_FCS_LEN;
    486                 buf = (u32 *)skb_put(skb, buf_len);
    487 
    488                 len = 0;
    489                 do {
    490                         sz = lan966x_rx_frame_word(lan966x, grp, &val);
    491                         if (sz < 0) {
    492                                 kfree_skb(skb);
    493                                 goto recover;
    494                         }
    495 
    496                         *buf++ = val;
    497                         len += sz;
    498                 } while (len < buf_len);
    499 
    500                 /* Read the FCS */
    501                 sz = lan966x_rx_frame_word(lan966x, grp, &val);
    502                 if (sz < 0) {
                            ^^^^^^

    503                         kfree_skb(skb);
    504                         goto recover;
    505                 }
    506 
    507                 /* Update the statistics if part of the FCS was read before */
    508                 len -= ETH_FCS_LEN - sz;
    509 
    510                 if (unlikely(dev->features & NETIF_F_RXFCS)) {
    511                         buf = (u32 *)skb_put(skb, ETH_FCS_LEN);
    512                         *buf = val;
    513                 }
    514 
--> 515                 if (sz < 0) {
                            ^^^^^^
"sz" can't be negative here.

    516                         err = sz;
    517                         break;
    518                 }
    519 
    520                 skb->protocol = eth_type_trans(skb, dev);
    521 
    522                 netif_rx_ni(skb);
    523                 dev->stats.rx_bytes += len;
    524                 dev->stats.rx_packets++;
    525 
    526 recover:
    527                 if (sz < 0 || err)
    528                         lan_rd(lan966x, QS_XTR_RD(grp));
    529 
    530         } while (lan_rd(lan966x, QS_XTR_DATA_PRESENT) & BIT(grp));
    531 
    532         return IRQ_HANDLED;
    533 }

regards,
dan carpenter



[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux