Shared skbs should be rather rare. But, there seem to be tricky things with skb_get() or raw atomic_inc(&skb->users) that /could/ cause a BUG when calling into pskb_expand_head() in our path. Taking pktgen aside, I remember from an old netdev discussion, that with taps shared skbs and pskb_expand_head() should cause issues. Going through the pf_packet
I don't think so. only pktgen does ugly things. it's a requirement of the IP stack to have users == 1. we had this discussion before. I will try to dig out my old email.
I believe from the old nft ingress discussion. ;) But maybe it was just a different issue w/ other actions (or not up to date fact anymore).
btw, there is skb_make_writable() that used by netfilter, but doing skb_cloned(skb) && !skb_clone_writable() && pskb_expand is faster and probably cleaner.
There's also skb_ensure_writable(), but seems to be doing more than we actually need.