diff options
Diffstat (limited to 'net/ipv6/raw.c')
| -rw-r--r-- | net/ipv6/raw.c | 4 | 
1 files changed, 4 insertions, 0 deletions
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index a06a9f847db5..ada087b50541 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -505,6 +505,7 @@ csum_copy_err:  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; @@ -522,6 +523,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);  |