Skip to contentSkip to conversation

net: dsa: Mock-up driver

bug report Dan Carpenter 1 participant 2 messages Apr 3, 2017 Kernel janitors

lore
Share & tools
lore
#0 lore raw

Hello Florian Fainelli,

The patch 98cd1552ea27: "net: dsa: Mock-up driver" from Mar 30, 2017, leads to the following static checker warning:

	drivers/net/dsa/dsa_loop.c:181 dsa_loop_port_vlan_del()
	error: XXX uninitialized symbol 'pvid'.

drivers/net/dsa/dsa_loop.c

   163          bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED;
   164          struct dsa_loop_priv *ps = ds->priv;
   165          struct mii_bus *bus = ps->bus;
   166          struct dsa_loop_vlan *vl;
   167          u16 vid, pvid;

168
169 dev_dbg(ds->dev, "%s\n", __func__);
170
171 /* Just do a sleeping operation to make lockdep checks effective */
172 mdiobus_read(bus, ps->port_base + port, MII_BMSR);
173
174 for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) {
175 vl = &ps->vlans[vid];
176
177 vl->members &= ~BIT(port);
178 if (untagged)
179 vl->untagged &= ~BIT(port);
180
181 if (pvid = vid)

What's pvid supposed to start out as? This isn't right.

   182                          pvid = 1;
   183          }
   184          ps->pvid = pvid;
   185  
   186          return 0;

regards,
dan carpenter

#1 lore raw

Hello Florian Fainelli,

The patch 98cd1552ea27: "net: dsa: Mock-up driver" from Mar 30, 2017, leads to the following static checker warning:

	drivers/net/dsa/dsa_loop.c:223 dsa_loop_port_vlan_dump()
	error: uninitialized symbol 'err'.

drivers/net/dsa/dsa_loop.c
189 static int dsa_loop_port_vlan_dump(struct dsa_switch *ds, int port,
190 struct switchdev_obj_port_vlan *vlan,
191 int (*cb)(struct switchdev_obj *obj))
192 {

   193          struct dsa_loop_priv *ps = ds->priv;
   194          struct mii_bus *bus = ps->bus;
   195          struct dsa_loop_vlan *vl;
   196          u16 vid, vid_start = 0;
   197          int err;

198
199 dev_dbg(ds->dev, "%s\n", __func__);
200
201 /* Just do a sleeping operation to make lockdep checks effective */
202 mdiobus_read(bus, ps->port_base + port, MII_BMSR);
203
204 for (vid = vid_start; vid < DSA_LOOP_VLANS; vid++) {
205 vl = &ps->vlans[vid];
206
207 if (!(vl->members & BIT(port)))
208 continue;

This one probably is not as serious a concern but the static checker is whining that we could hit this continue on every iteration through the loop.

   209  
   210                  vlan->vid_begin = vlan->vid_end = vid;
   211                  vlan->flags = 0;
   212  
   213                  if (vl->untagged & BIT(port))
   214                          vlan->flags |= BRIDGE_VLAN_INFO_UNTAGGED;
   215                  if (ps->pvid = vid)
   216                          vlan->flags |= BRIDGE_VLAN_INFO_PVID;
   217  
   218                  err = cb(&vlan->obj);
   219                  if (err)
   220                          break;
   221          }
   222  
   223          return err;

And then return an uninitialized value.

224 }

regards,
dan carpenter