net: forbid VLAN insert in shared mbuf
authorFerruh Yigit <ferruh.yigit@intel.com>
Tue, 16 Apr 2019 15:51:26 +0000 (16:51 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 4 Jul 2019 13:59:14 +0000 (15:59 +0200)
The vlan_insert() is buggy when it tries to handle the shared mbufs,
instead don't support inserting VLAN tag into shared mbufs and return
an error for that case.

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
lib/librte_net/rte_ether.h

index 7be9b48..1868cb7 100644 (file)
@@ -393,15 +393,8 @@ static inline int rte_vlan_insert(struct rte_mbuf **m)
        struct rte_vlan_hdr *vh;
 
        /* Can't insert header if mbuf is shared */
-       if (rte_mbuf_refcnt_read(*m) > 1) {
-               struct rte_mbuf *copy;
-
-               copy = rte_pktmbuf_clone(*m, (*m)->pool);
-               if (unlikely(copy == NULL))
-                       return -ENOMEM;
-               rte_pktmbuf_free(*m);
-               *m = copy;
-       }
+       if (!RTE_MBUF_DIRECT(*m) || rte_mbuf_refcnt_read(*m) > 1)
+               return -EINVAL;
 
        oh = rte_pktmbuf_mtod(*m, struct rte_ether_hdr *);
        nh = (struct rte_ether_hdr *)