CC: [email protected]
CC: [email protected]
TO: Steen Hegelund <[email protected]>
CC: Bjarni Jonasson <[email protected]>
CC: Lars Povlsen <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   26291c54e111ff6ba87a164d85d4a4e134b7315c
commit: f3cad2611a77f0229dc16aa7bd2ef63e35ea9fb6 net: sparx5: add hostmode with 
phylink support
date:   7 months ago
:::::: branch date: 2 days ago
:::::: commit date: 7 months ago
config: nios2-randconfig-m031-20220130 
(https://download.01.org/0day-ci/archive/20220201/[email protected]/config)
compiler: nios2-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c:147 sparx5_xtr_grp() 
error: dereferencing freed memory 'skb'

vim +/skb +147 drivers/net/ethernet/microchip/sparx5/sparx5_packet.c

f3cad2611a77f0 Steen Hegelund 2021-06-24   52  
f3cad2611a77f0 Steen Hegelund 2021-06-24   53  static void 
sparx5_xtr_grp(struct sparx5 *sparx5, u8 grp, bool byte_swap)
f3cad2611a77f0 Steen Hegelund 2021-06-24   54  {
f3cad2611a77f0 Steen Hegelund 2021-06-24   55   bool eof_flag = false, 
pruned_flag = false, abort_flag = false;
f3cad2611a77f0 Steen Hegelund 2021-06-24   56   struct net_device *netdev;
f3cad2611a77f0 Steen Hegelund 2021-06-24   57   struct sparx5_port *port;
f3cad2611a77f0 Steen Hegelund 2021-06-24   58   struct frame_info fi;
f3cad2611a77f0 Steen Hegelund 2021-06-24   59   int i, byte_cnt = 0;
f3cad2611a77f0 Steen Hegelund 2021-06-24   60   struct sk_buff *skb;
f3cad2611a77f0 Steen Hegelund 2021-06-24   61   u32 ifh[IFH_LEN];
f3cad2611a77f0 Steen Hegelund 2021-06-24   62   u32 *rxbuf;
f3cad2611a77f0 Steen Hegelund 2021-06-24   63  
f3cad2611a77f0 Steen Hegelund 2021-06-24   64   /* Get IFH */
f3cad2611a77f0 Steen Hegelund 2021-06-24   65   for (i = 0; i < IFH_LEN; i++)
f3cad2611a77f0 Steen Hegelund 2021-06-24   66           ifh[i] = 
spx5_rd(sparx5, QS_XTR_RD(grp));
f3cad2611a77f0 Steen Hegelund 2021-06-24   67  
f3cad2611a77f0 Steen Hegelund 2021-06-24   68   /* Decode IFH (whats needed) */
f3cad2611a77f0 Steen Hegelund 2021-06-24   69   sparx5_ifh_parse(ifh, &fi);
f3cad2611a77f0 Steen Hegelund 2021-06-24   70  
f3cad2611a77f0 Steen Hegelund 2021-06-24   71   /* Map to port netdev */
f3cad2611a77f0 Steen Hegelund 2021-06-24   72   port = fi.src_port < SPX5_PORTS 
?
f3cad2611a77f0 Steen Hegelund 2021-06-24   73           
sparx5->ports[fi.src_port] : NULL;
f3cad2611a77f0 Steen Hegelund 2021-06-24   74   if (!port || !port->ndev) {
f3cad2611a77f0 Steen Hegelund 2021-06-24   75           dev_err(sparx5->dev, 
"Data on inactive port %d\n", fi.src_port);
f3cad2611a77f0 Steen Hegelund 2021-06-24   76           
sparx5_xtr_flush(sparx5, grp);
f3cad2611a77f0 Steen Hegelund 2021-06-24   77           return;
f3cad2611a77f0 Steen Hegelund 2021-06-24   78   }
f3cad2611a77f0 Steen Hegelund 2021-06-24   79  
f3cad2611a77f0 Steen Hegelund 2021-06-24   80   /* Have netdev, get skb */
f3cad2611a77f0 Steen Hegelund 2021-06-24   81   netdev = port->ndev;
f3cad2611a77f0 Steen Hegelund 2021-06-24   82   skb = netdev_alloc_skb(netdev, 
netdev->mtu + ETH_HLEN);
f3cad2611a77f0 Steen Hegelund 2021-06-24   83   if (!skb) {
f3cad2611a77f0 Steen Hegelund 2021-06-24   84           
sparx5_xtr_flush(sparx5, grp);
f3cad2611a77f0 Steen Hegelund 2021-06-24   85           dev_err(sparx5->dev, 
"No skb allocated\n");
f3cad2611a77f0 Steen Hegelund 2021-06-24   86           
netdev->stats.rx_dropped++;
f3cad2611a77f0 Steen Hegelund 2021-06-24   87           return;
f3cad2611a77f0 Steen Hegelund 2021-06-24   88   }
f3cad2611a77f0 Steen Hegelund 2021-06-24   89   rxbuf = (u32 *)skb->data;
f3cad2611a77f0 Steen Hegelund 2021-06-24   90  
f3cad2611a77f0 Steen Hegelund 2021-06-24   91   /* Now, pull frame data */
f3cad2611a77f0 Steen Hegelund 2021-06-24   92   while (!eof_flag) {
f3cad2611a77f0 Steen Hegelund 2021-06-24   93           u32 val = 
spx5_rd(sparx5, QS_XTR_RD(grp));
f3cad2611a77f0 Steen Hegelund 2021-06-24   94           u32 cmp = val;
f3cad2611a77f0 Steen Hegelund 2021-06-24   95  
f3cad2611a77f0 Steen Hegelund 2021-06-24   96           if (byte_swap)
f3cad2611a77f0 Steen Hegelund 2021-06-24   97                   cmp = 
ntohl((__force __be32)val);
f3cad2611a77f0 Steen Hegelund 2021-06-24   98  
f3cad2611a77f0 Steen Hegelund 2021-06-24   99           switch (cmp) {
f3cad2611a77f0 Steen Hegelund 2021-06-24  100           case XTR_NOT_READY:
f3cad2611a77f0 Steen Hegelund 2021-06-24  101                   break;
f3cad2611a77f0 Steen Hegelund 2021-06-24  102           case XTR_ABORT:
f3cad2611a77f0 Steen Hegelund 2021-06-24  103                   /* No 
accompanying data */
f3cad2611a77f0 Steen Hegelund 2021-06-24  104                   abort_flag = 
true;
f3cad2611a77f0 Steen Hegelund 2021-06-24  105                   eof_flag = true;
f3cad2611a77f0 Steen Hegelund 2021-06-24  106                   break;
f3cad2611a77f0 Steen Hegelund 2021-06-24  107           case XTR_EOF_0:
f3cad2611a77f0 Steen Hegelund 2021-06-24  108           case XTR_EOF_1:
f3cad2611a77f0 Steen Hegelund 2021-06-24  109           case XTR_EOF_2:
f3cad2611a77f0 Steen Hegelund 2021-06-24  110           case XTR_EOF_3:
f3cad2611a77f0 Steen Hegelund 2021-06-24  111                   /* This assumes 
STATUS_WORD_POS == 1, Status
f3cad2611a77f0 Steen Hegelund 2021-06-24  112                    * just after 
last data
f3cad2611a77f0 Steen Hegelund 2021-06-24  113                    */
f3cad2611a77f0 Steen Hegelund 2021-06-24  114                   byte_cnt -= (4 
- XTR_VALID_BYTES(val));
f3cad2611a77f0 Steen Hegelund 2021-06-24  115                   eof_flag = true;
f3cad2611a77f0 Steen Hegelund 2021-06-24  116                   break;
f3cad2611a77f0 Steen Hegelund 2021-06-24  117           case XTR_PRUNED:
f3cad2611a77f0 Steen Hegelund 2021-06-24  118                   /* But get the 
last 4 bytes as well */
f3cad2611a77f0 Steen Hegelund 2021-06-24  119                   eof_flag = true;
f3cad2611a77f0 Steen Hegelund 2021-06-24  120                   pruned_flag = 
true;
f3cad2611a77f0 Steen Hegelund 2021-06-24  121                   fallthrough;
f3cad2611a77f0 Steen Hegelund 2021-06-24  122           case XTR_ESCAPE:
f3cad2611a77f0 Steen Hegelund 2021-06-24  123                   *rxbuf = 
spx5_rd(sparx5, QS_XTR_RD(grp));
f3cad2611a77f0 Steen Hegelund 2021-06-24  124                   byte_cnt += 4;
f3cad2611a77f0 Steen Hegelund 2021-06-24  125                   rxbuf++;
f3cad2611a77f0 Steen Hegelund 2021-06-24  126                   break;
f3cad2611a77f0 Steen Hegelund 2021-06-24  127           default:
f3cad2611a77f0 Steen Hegelund 2021-06-24  128                   *rxbuf = val;
f3cad2611a77f0 Steen Hegelund 2021-06-24  129                   byte_cnt += 4;
f3cad2611a77f0 Steen Hegelund 2021-06-24  130                   rxbuf++;
f3cad2611a77f0 Steen Hegelund 2021-06-24  131           }
f3cad2611a77f0 Steen Hegelund 2021-06-24  132   }
f3cad2611a77f0 Steen Hegelund 2021-06-24  133  
f3cad2611a77f0 Steen Hegelund 2021-06-24  134   if (abort_flag || pruned_flag 
|| !eof_flag) {
f3cad2611a77f0 Steen Hegelund 2021-06-24  135           netdev_err(netdev, 
"Discarded frame: abort:%d pruned:%d eof:%d\n",
f3cad2611a77f0 Steen Hegelund 2021-06-24  136                      abort_flag, 
pruned_flag, eof_flag);
f3cad2611a77f0 Steen Hegelund 2021-06-24  137           kfree_skb(skb);
f3cad2611a77f0 Steen Hegelund 2021-06-24  138           
netdev->stats.rx_dropped++;
f3cad2611a77f0 Steen Hegelund 2021-06-24  139           return;
f3cad2611a77f0 Steen Hegelund 2021-06-24  140   }
f3cad2611a77f0 Steen Hegelund 2021-06-24  141  
f3cad2611a77f0 Steen Hegelund 2021-06-24  142   /* Finish up skb */
f3cad2611a77f0 Steen Hegelund 2021-06-24  143   skb_put(skb, byte_cnt - 
ETH_FCS_LEN);
f3cad2611a77f0 Steen Hegelund 2021-06-24  144   eth_skb_pad(skb);
f3cad2611a77f0 Steen Hegelund 2021-06-24  145   skb->protocol = 
eth_type_trans(skb, netdev);
f3cad2611a77f0 Steen Hegelund 2021-06-24  146   netif_rx(skb);
f3cad2611a77f0 Steen Hegelund 2021-06-24 @147   netdev->stats.rx_bytes += 
skb->len;
f3cad2611a77f0 Steen Hegelund 2021-06-24  148   netdev->stats.rx_packets++;
f3cad2611a77f0 Steen Hegelund 2021-06-24  149  }
f3cad2611a77f0 Steen Hegelund 2021-06-24  150  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to