{
struct ofp_action_output *oa = (struct ofp_action_output *)ah;
- if (oa->port == htons(OFPP_NONE) || oa->port == key->in_port)
+ if (oa->port == htons(OFPP_NONE) ||
+ (!(key->wildcards & OFPFW_IN_PORT) && oa->port == key->in_port))
return OFPBAC_BAD_OUT_PORT;
return ACT_VALIDATION_OK;
struct ofp_action_header *ah = (struct ofp_action_header *)p;
size_t len = htons(ah->len);
+ WARN_ON_ONCE(skb_shared(skb));
if (prev_port != -1) {
do_output(dp, skb_clone(skb, GFP_ATOMIC),
max_len, prev_port, ignore_no_fwd);