diff options
Diffstat (limited to 'net/ipv4/cipso_ipv4.c')
| -rw-r--r-- | net/ipv4/cipso_ipv4.c | 13 | 
1 files changed, 6 insertions, 7 deletions
| diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c index 740af8541d2f..709021197e1c 100644 --- a/net/ipv4/cipso_ipv4.c +++ b/net/ipv4/cipso_ipv4.c @@ -1715,8 +1715,7 @@ validate_return:   */  void cipso_v4_error(struct sk_buff *skb, int error, u32 gateway)  { -	unsigned char optbuf[sizeof(struct ip_options) + 40]; -	struct ip_options *opt = (struct ip_options *)optbuf; +	struct inet_skb_parm parm;  	int res;  	if (ip_hdr(skb)->protocol == IPPROTO_ICMP || error != -EACCES) @@ -1727,19 +1726,19 @@ void cipso_v4_error(struct sk_buff *skb, int error, u32 gateway)  	 * so we can not use icmp_send and IPCB here.  	 */ -	memset(opt, 0, sizeof(struct ip_options)); -	opt->optlen = ip_hdr(skb)->ihl*4 - sizeof(struct iphdr); +	memset(&parm, 0, sizeof(parm)); +	parm.opt.optlen = ip_hdr(skb)->ihl * 4 - sizeof(struct iphdr);  	rcu_read_lock(); -	res = __ip_options_compile(dev_net(skb->dev), opt, skb, NULL); +	res = __ip_options_compile(dev_net(skb->dev), &parm.opt, skb, NULL);  	rcu_read_unlock();  	if (res)  		return;  	if (gateway) -		__icmp_send(skb, ICMP_DEST_UNREACH, ICMP_NET_ANO, 0, opt); +		__icmp_send(skb, ICMP_DEST_UNREACH, ICMP_NET_ANO, 0, &parm);  	else -		__icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_ANO, 0, opt); +		__icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_ANO, 0, &parm);  }  /** | 
