On 12/14/2018 09:11 PM, Andrew Lunn wrote: > On Fri, Dec 14, 2018 at 02:30:35PM +0100, Marek Vasut wrote: >> On 12/14/2018 10:05 AM, Andrew Lunn wrote: >>>> +static struct sk_buff *ksz_common_xmit(struct sk_buff *skb, >>>> + struct net_device *dev, int len) >>>> { >>>> - struct dsa_port *dp = dsa_slave_to_port(dev); >>>> struct sk_buff *nskb; >>>> int padlen; >>>> - u8 *tag; >>>> >>>> padlen = (skb->len >= ETH_ZLEN) ? 0 : ETH_ZLEN - skb->len; >>>> >>>> - if (skb_tailroom(skb) >= padlen + KSZ_INGRESS_TAG_LEN) { >>>> + if (skb_tailroom(skb) >= padlen + len) { >>>> /* Let dsa_slave_xmit() free skb */ >>>> if (__skb_put_padto(skb, skb->len + padlen, false)) >>>> return NULL; >>> >>> Hi Marek >> >> Hi, >> >>> This can return NULL. >>> >>>> +static struct sk_buff *ksz9477_xmit(struct sk_buff *skb, >>>> + struct net_device *dev) >>>> +{ >>>> + struct dsa_port *dp = dsa_slave_to_port(dev); >>>> + struct sk_buff *nskb; >>>> + u16 *tag; >>>> + u8 *addr; >>>> + >>>> + nskb = ksz_common_xmit(skb, dev, KSZ9477_INGRESS_TAG_LEN); >>> >>> So here you need to check for NULL >> >> What do we do if the xmit returns NULL ? > > Return NULL to the caller. There are comments which explain this:
Ahh ... right, of course. > static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev) > { > [snip] > /* Transmit function may have to reallocate the original SKB, > * in which case it must have freed it. Only free it here on error. > */ > nskb = p->xmit(skb, dev); > if (!nskb) { > kfree_skb(skb); > return NETDEV_TX_OK; > } > > Andrew > -- Best regards, Marek Vasut