openvswitch: Reject ct_state masks for unknown bits
Currently, 0-bits are generated in ct_state where the bit position is undefined, and matches are accepted on these bit-positions. If userspace requests to match the 0-value for this bit then it may expect only a subset of traffic to match this value, whereas currently all packets will have this bit set to 0. Fix this by rejecting such masks. Signed-off-by: Joe Stringer <joestringer@nicira.com> Acked-by: Pravin B Shelar <pshelar@nicira.com> Acked-by: Thomas Graf <tgraf@suug.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
e2e8009ff7
commit
9e384715e9
@@ -35,12 +35,9 @@ void ovs_ct_fill_key(const struct sk_buff *skb, struct sw_flow_key *key);
|
||||
int ovs_ct_put_key(const struct sw_flow_key *key, struct sk_buff *skb);
|
||||
void ovs_ct_free_action(const struct nlattr *a);
|
||||
|
||||
static inline bool ovs_ct_state_supported(u32 state)
|
||||
{
|
||||
return !(state & ~(OVS_CS_F_NEW | OVS_CS_F_ESTABLISHED |
|
||||
OVS_CS_F_RELATED | OVS_CS_F_REPLY_DIR |
|
||||
OVS_CS_F_INVALID | OVS_CS_F_TRACKED));
|
||||
}
|
||||
#define CT_SUPPORTED_MASK (OVS_CS_F_NEW | OVS_CS_F_ESTABLISHED | \
|
||||
OVS_CS_F_RELATED | OVS_CS_F_REPLY_DIR | \
|
||||
OVS_CS_F_INVALID | OVS_CS_F_TRACKED)
|
||||
#else
|
||||
#include <linux/errno.h>
|
||||
|
||||
@@ -53,11 +50,6 @@ static inline bool ovs_ct_verify(struct net *net, int attr)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool ovs_ct_state_supported(u32 state)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int ovs_ct_copy_action(struct net *net, const struct nlattr *nla,
|
||||
const struct sw_flow_key *key,
|
||||
struct sw_flow_actions **acts, bool log)
|
||||
@@ -94,5 +86,7 @@ static inline int ovs_ct_put_key(const struct sw_flow_key *key,
|
||||
}
|
||||
|
||||
static inline void ovs_ct_free_action(const struct nlattr *a) { }
|
||||
|
||||
#define CT_SUPPORTED_MASK 0
|
||||
#endif /* CONFIG_NF_CONNTRACK */
|
||||
#endif /* ovs_conntrack.h */
|
||||
|
Reference in New Issue
Block a user