Message ID | Y7y4Wsfjm0G7kUBm@gondor.apana.org.au (mailing list archive) |
---|---|
State | Accepted |
Commit | cb3e9864cdbe35ff6378966660edbcbac955fe17 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | ipv6: raw: Deduct extension header length in rawv6_push_pending_frames | expand |
Hello: This patch was applied to netdev/net.git (master) by David S. Miller <davem@davemloft.net>: On Tue, 10 Jan 2023 08:59:06 +0800 you wrote: > On Mon, Jan 09, 2023 at 11:08:08AM +0100, Eric Dumazet wrote: > > > > Kyle posted one in https://lore.kernel.org/netdev/Y7s%2FFofVXLwoVgWt@westworld/ > > Thanks for the link! > > It looks like I didn't think about extension headers in the original > patch. > > [...] Here is the summary with links: - ipv6: raw: Deduct extension header length in rawv6_push_pending_frames https://git.kernel.org/netdev/net/c/cb3e9864cdbe You are awesome, thank you!
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index c51d5ce3711c..c68020b8de89 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -539,6 +539,7 @@ static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int rawv6_push_pending_frames(struct sock *sk, struct flowi6 *fl6, struct raw6_sock *rp) { + struct ipv6_txoptions *opt; struct sk_buff *skb; int err = 0; int offset; @@ -556,6 +557,9 @@ static int rawv6_push_pending_frames(struct sock *sk, struct flowi6 *fl6, offset = rp->offset; total_len = inet_sk(sk)->cork.base.length; + opt = inet6_sk(sk)->cork.opt; + total_len -= opt ? opt->opt_flen : 0; + if (offset >= total_len - 1) { err = -EINVAL; ip6_flush_pending_frames(sk);