Message ID | 453b10a48c21d1882bbee21fe2c84197faad75e1.1627080361.git.lucien.xin@gmail.com |
---|---|
State | New |
Headers | show |
Series | [net] tipc: do not write skb_shinfo frags when doing decrytion | expand |
Hello: This patch was applied to netdev/net.git (refs/heads/master): On Fri, 23 Jul 2021 18:46:01 -0400 you wrote: > One skb's skb_shinfo frags are not writable, and they can be shared with > other skbs' like by pskb_copy(). To write the frags may cause other skb's > data crash. > > So before doing en/decryption, skb_cow_data() should always be called for > a cloned or nonlinear skb if req dst is using the same sg as req src. > While at it, the likely branch can be removed, as it will be covered > by skb_cow_data(). > > [...] Here is the summary with links: - [net] tipc: do not write skb_shinfo frags when doing decrytion https://git.kernel.org/netdev/net/c/3cf4375a0904 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
diff --git a/net/tipc/crypto.c b/net/tipc/crypto.c index e5c43d4d5a75..c9391d38de85 100644 --- a/net/tipc/crypto.c +++ b/net/tipc/crypto.c @@ -898,16 +898,10 @@ static int tipc_aead_decrypt(struct net *net, struct tipc_aead *aead, if (unlikely(!aead)) return -ENOKEY; - /* Cow skb data if needed */ - if (likely(!skb_cloned(skb) && - (!skb_is_nonlinear(skb) || !skb_has_frag_list(skb)))) { - nsg = 1 + skb_shinfo(skb)->nr_frags; - } else { - nsg = skb_cow_data(skb, 0, &unused); - if (unlikely(nsg < 0)) { - pr_err("RX: skb_cow_data() returned %d\n", nsg); - return nsg; - } + nsg = skb_cow_data(skb, 0, &unused); + if (unlikely(nsg < 0)) { + pr_err("RX: skb_cow_data() returned %d\n", nsg); + return nsg; } /* Allocate memory for the AEAD operation */