diff options
Diffstat (limited to 'net/openvswitch/actions.c')
| -rw-r--r-- | net/openvswitch/actions.c | 18 | 
1 files changed, 10 insertions, 8 deletions
diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c index 65cfaa81607..e70d8b18e96 100644 --- a/net/openvswitch/actions.c +++ b/net/openvswitch/actions.c @@ -134,8 +134,8 @@ static int set_eth_addr(struct sk_buff *skb,  	skb_postpull_rcsum(skb, eth_hdr(skb), ETH_ALEN * 2); -	memcpy(eth_hdr(skb)->h_source, eth_key->eth_src, ETH_ALEN); -	memcpy(eth_hdr(skb)->h_dest, eth_key->eth_dst, ETH_ALEN); +	ether_addr_copy(eth_hdr(skb)->h_source, eth_key->eth_src); +	ether_addr_copy(eth_hdr(skb)->h_dest, eth_key->eth_dst);  	ovs_skb_postpush_rcsum(skb, eth_hdr(skb), ETH_ALEN * 2); @@ -165,7 +165,7 @@ static void set_ip_addr(struct sk_buff *skb, struct iphdr *nh,  	}  	csum_replace4(&nh->check, *addr, new_addr); -	skb->rxhash = 0; +	skb_clear_hash(skb);  	*addr = new_addr;  } @@ -199,7 +199,7 @@ static void set_ipv6_addr(struct sk_buff *skb, u8 l4_proto,  	if (recalculate_csum)  		update_ipv6_checksum(skb, l4_proto, addr, new_addr); -	skb->rxhash = 0; +	skb_clear_hash(skb);  	memcpy(addr, new_addr, sizeof(__be32[4]));  } @@ -296,7 +296,7 @@ static void set_tp_port(struct sk_buff *skb, __be16 *port,  {  	inet_proto_csum_replace2(check, skb, *port, new_port, 0);  	*port = new_port; -	skb->rxhash = 0; +	skb_clear_hash(skb);  }  static void set_udp_port(struct sk_buff *skb, __be16 *port, __be16 new_port) @@ -310,7 +310,7 @@ static void set_udp_port(struct sk_buff *skb, __be16 *port, __be16 new_port)  			uh->check = CSUM_MANGLED_0;  	} else {  		*port = new_port; -		skb->rxhash = 0; +		skb_clear_hash(skb);  	}  } @@ -381,7 +381,7 @@ static int set_sctp(struct sk_buff *skb,  		/* Carry any checksum errors through. */  		sh->checksum = old_csum ^ old_correct_csum ^ new_csum; -		skb->rxhash = 0; +		skb_clear_hash(skb);  	}  	return 0; @@ -445,7 +445,7 @@ static int sample(struct datapath *dp, struct sk_buff *skb,  		 a = nla_next(a, &rem)) {  		switch (nla_type(a)) {  		case OVS_SAMPLE_ATTR_PROBABILITY: -			if (net_random() >= nla_get_u32(a)) +			if (prandom_u32() >= nla_get_u32(a))  				return 0;  			break; @@ -551,6 +551,8 @@ static int do_execute_actions(struct datapath *dp, struct sk_buff *skb,  		case OVS_ACTION_ATTR_SAMPLE:  			err = sample(dp, skb, a); +			if (unlikely(err)) /* skb already freed. */ +				return err;  			break;  		}  | 
