Message ID | 1472624105-5163-1-git-send-email-fgao@ikuai8.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: fgao@ikuai8.com Date: Wed, 31 Aug 2016 14:15:05 +0800 > From: Gao Feng <fgao@ikuai8.com> > > The original codes depend on that the function parameters are evaluated from > left to right. But the parameter's evaluation order is not defined in C > standard actually. > > When flow_keys_have_l4(&keys) is invoked before ___skb_get_hash(skb, &keys, > hashrnd) with some compilers or environment, the keys passed to > flow_keys_have_l4 is not initialized. > > Fixes: 6db61d79c1e1 ("flow_dissector: Ignore flow dissector return value from ___skb_get_hash") > > Acked-by: Eric Dumazet <edumazet@google.com> > Signed-off-by: Gao Feng <fgao@ikuai8.com> Applied.
diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 61ad43f..52742a0 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -680,11 +680,13 @@ EXPORT_SYMBOL_GPL(__skb_get_hash_symmetric); void __skb_get_hash(struct sk_buff *skb) { struct flow_keys keys; + u32 hash; __flow_hash_secret_init(); - __skb_set_sw_hash(skb, ___skb_get_hash(skb, &keys, hashrnd), - flow_keys_have_l4(&keys)); + hash = ___skb_get_hash(skb, &keys, hashrnd); + + __skb_set_sw_hash(skb, hash, flow_keys_have_l4(&keys)); } EXPORT_SYMBOL(__skb_get_hash);