Skip to content

Commit

Permalink
net: dsa: tag_rtl4_a: fix egress tags
Browse files Browse the repository at this point in the history
commit 9eb8bc5 upstream.

Commit 86dd986 has several issues, but was accepted too soon
before anyone could take a look.

- Double free. dsa_slave_xmit() will free the skb if the xmit function
  returns NULL, but the skb is already freed by eth_skb_pad(). Use
  __skb_put_padto() to avoid that.
- Unnecessary allocation. It has been done by DSA core since commit
  a3b0b64.
- A u16 pointer points to skb data. It should be __be16 for network
  byte order.
- Typo in comments. "numer" -> "number".

Fixes: 86dd986 ("net: dsa: tag_rtl4_a: Support also egress tags")
Signed-off-by: DENG Qingfang <dqfext@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
LGA1150 authored and gregkh committed Mar 17, 2021
1 parent 95cafdf commit 7456363
Showing 1 changed file with 5 additions and 7 deletions.
12 changes: 5 additions & 7 deletions net/dsa/tag_rtl4_a.c
Expand Up @@ -35,14 +35,12 @@ static struct sk_buff *rtl4a_tag_xmit(struct sk_buff *skb,
struct net_device *dev)
{
struct dsa_port *dp = dsa_slave_to_port(dev);
__be16 *p;
u8 *tag;
u16 *p;
u16 out;

/* Pad out to at least 60 bytes */
if (unlikely(eth_skb_pad(skb)))
return NULL;
if (skb_cow_head(skb, RTL4_A_HDR_LEN) < 0)
if (unlikely(__skb_put_padto(skb, ETH_ZLEN, false)))
return NULL;

netdev_dbg(dev, "add realtek tag to package to port %d\n",
Expand All @@ -53,13 +51,13 @@ static struct sk_buff *rtl4a_tag_xmit(struct sk_buff *skb,
tag = skb->data + 2 * ETH_ALEN;

/* Set Ethertype */
p = (u16 *)tag;
p = (__be16 *)tag;
*p = htons(RTL4_A_ETHERTYPE);

out = (RTL4_A_PROTOCOL_RTL8366RB << 12) | (2 << 8);
/* The lower bits is the port numer */
/* The lower bits is the port number */
out |= (u8)dp->index;
p = (u16 *)(tag + 2);
p = (__be16 *)(tag + 2);
*p = htons(out);

return skb;
Expand Down

0 comments on commit 7456363

Please sign in to comment.