[bug report] net: ocelot: Extend MRP

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

 



Hello Horatiu Vultur,

This is a semi-automatic email about new static checker warnings.

The patch 7c588c3e96e9: "net: ocelot: Extend MRP" from Mar 16, 2021,
leads to the following Smatch complaint:

    drivers/net/ethernet/mscc/ocelot_mrp.c:180 ocelot_mrp_del()
    error: we previously assumed 'ocelot_port' could be null (see line 173)

drivers/net/ethernet/mscc/ocelot_mrp.c
   153  int ocelot_mrp_del(struct ocelot *ocelot, int port,
   154                     const struct switchdev_obj_mrp *mrp)
   155  {
   156          struct ocelot_port *ocelot_port = ocelot->ports[port];
   157          int i;
   158  
   159          if (!ocelot_port)
   160                  return -EOPNOTSUPP;
   161  
   162          if (ocelot_port->mrp_ring_id != mrp->ring_id)
   163                  return 0;
   164  
   165          ocelot_mrp_del_vcap(ocelot, port);
   166          ocelot_mrp_del_vcap(ocelot, port + ocelot->num_phys_ports);
   167  
   168          ocelot_port->mrp_ring_id = 0;
   169  
   170          for (i = 0; i < ocelot->num_phys_ports; ++i) {

This loop tries to verify that all the ports have ring_id == 0 otherwise
we return.  It's slightly confusing why this matters.

   171                  ocelot_port = ocelot->ports[i];
   172	
   173			if (!ocelot_port)
                             ^^^^^^^^^^^
Assume the last element of the array is NULL

   174				continue;
   175	
   176			if (ocelot_port->mrp_ring_id != 0)
   177				goto out;

This would be more clear if instead of a "goto out;" it just did a
direct "return 0;"

   178		}
   179	
   180		ocelot_mrp_del_mac(ocelot, ocelot_port);

We delete the last mac address of all the ring_ids are zero but if the
last port is zero it will crash.

   181	out:
   182		return 0;

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