* @b_ptr: the bearer through which the packet is to be sent
  * @dest: peer destination address
  */
-int tipc_l2_send_msg(struct net *net, struct sk_buff *buf,
+int tipc_l2_send_msg(struct net *net, struct sk_buff *skb,
                     struct tipc_bearer *b, struct tipc_media_addr *dest)
 {
-       struct sk_buff *clone;
        struct net_device *dev;
        int delta;
 
        if (!dev)
                return 0;
 
-       clone = skb_clone(buf, GFP_ATOMIC);
-       if (!clone)
-               return 0;
-
-       delta = dev->hard_header_len - skb_headroom(buf);
+       delta = dev->hard_header_len - skb_headroom(skb);
        if ((delta > 0) &&
-           pskb_expand_head(clone, SKB_DATA_ALIGN(delta), 0, GFP_ATOMIC)) {
-               kfree_skb(clone);
+           pskb_expand_head(skb, SKB_DATA_ALIGN(delta), 0, GFP_ATOMIC)) {
+               kfree_skb(skb);
                return 0;
        }
 
-       skb_reset_network_header(clone);
-       clone->dev = dev;
-       clone->protocol = htons(ETH_P_TIPC);
-       dev_hard_header(clone, dev, ETH_P_TIPC, dest->value,
-                       dev->dev_addr, clone->len);
-       dev_queue_xmit(clone);
+       skb_reset_network_header(skb);
+       skb->dev = dev;
+       skb->protocol = htons(ETH_P_TIPC);
+       dev_hard_header(skb, dev, ETH_P_TIPC, dest->value,
+                       dev->dev_addr, skb->len);
+       dev_queue_xmit(skb);
        return 0;
 }
 
        if (likely(b))
                b->media->send_msg(net, skb, b, dest);
        rcu_read_unlock();
-       /* Until we remove cloning in tipc_l2_send_msg(): */
-       kfree_skb(skb);
 }
 
 /* tipc_bearer_xmit() -send buffer to destination over bearer
                skb_queue_walk_safe(xmitq, skb, tmp) {
                        __skb_dequeue(xmitq);
                        b->media->send_msg(net, skb, b, dst);
-                       /* Until we remove cloning in tipc_l2_send_msg(): */
-                       kfree_skb(skb);
                }
        }
        rcu_read_unlock();
                        msg_set_mc_netid(hdr, net_id);
                        __skb_dequeue(xmitq);
                        b->media->send_msg(net, skb, b, &b->bcast_addr);
-                       /* Until we remove cloning in tipc_l2_send_msg(): */
-                       kfree_skb(skb);
                }
        }
        rcu_read_unlock();
 
        struct udp_bearer *ub;
        struct udp_media_addr *dst = (struct udp_media_addr *)&dest->value;
        struct udp_media_addr *src = (struct udp_media_addr *)&b->addr.value;
-       struct sk_buff *clone;
        struct rtable *rt;
 
        if (skb_headroom(skb) < UDP_MIN_HEADROOM)
                pskb_expand_head(skb, UDP_MIN_HEADROOM, 0, GFP_ATOMIC);
 
-       clone = skb_clone(skb, GFP_ATOMIC);
-       skb_set_inner_protocol(clone, htons(ETH_P_TIPC));
+       skb_set_inner_protocol(skb, htons(ETH_P_TIPC));
        ub = rcu_dereference_rtnl(b->media_ptr);
        if (!ub) {
                err = -ENODEV;
                struct flowi4 fl = {
                        .daddr = dst->ipv4.s_addr,
                        .saddr = src->ipv4.s_addr,
-                       .flowi4_mark = clone->mark,
+                       .flowi4_mark = skb->mark,
                        .flowi4_proto = IPPROTO_UDP
                };
                rt = ip_route_output_key(net, &fl);
                        goto tx_error;
                }
                ttl = ip4_dst_hoplimit(&rt->dst);
-               err = udp_tunnel_xmit_skb(rt, ub->ubsock->sk, clone,
+               err = udp_tunnel_xmit_skb(rt, ub->ubsock->sk, skb,
                                          src->ipv4.s_addr,
                                          dst->ipv4.s_addr, 0, ttl, 0,
                                          src->udp_port, dst->udp_port,
                if (err)
                        goto tx_error;
                ttl = ip6_dst_hoplimit(ndst);
-               err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, clone,
+               err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb,
                                           ndst->dev, &src->ipv6,
                                           &dst->ipv6, 0, ttl, src->udp_port,
                                           dst->udp_port, false);
        return err;
 
 tx_error:
-       kfree_skb(clone);
+       kfree_skb(skb);
        return err;
 }