|
@@ -581,10 +581,13 @@ static int metadata_from_nlattrs(struct sw_flow_match *match, u64 *attrs,
|
|
|
if (*attrs & (1 << OVS_KEY_ATTR_IN_PORT)) {
|
|
|
u32 in_port = nla_get_u32(a[OVS_KEY_ATTR_IN_PORT]);
|
|
|
|
|
|
- if (is_mask)
|
|
|
+ if (is_mask) {
|
|
|
in_port = 0xffffffff; /* Always exact match in_port. */
|
|
|
- else if (in_port >= DP_MAX_PORTS)
|
|
|
+ } else if (in_port >= DP_MAX_PORTS) {
|
|
|
+ OVS_NLERR("Port (%d) exceeds maximum allowable (%d).\n",
|
|
|
+ in_port, DP_MAX_PORTS);
|
|
|
return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
SW_FLOW_KEY_PUT(match, phy.in_port, in_port, is_mask);
|
|
|
*attrs &= ~(1 << OVS_KEY_ATTR_IN_PORT);
|
|
@@ -824,8 +827,11 @@ static int ovs_key_from_nlattrs(struct sw_flow_match *match, u64 attrs,
|
|
|
attrs &= ~(1 << OVS_KEY_ATTR_ND);
|
|
|
}
|
|
|
|
|
|
- if (attrs != 0)
|
|
|
+ if (attrs != 0) {
|
|
|
+ OVS_NLERR("Unknown key attributes (%llx).\n",
|
|
|
+ (unsigned long long)attrs);
|
|
|
return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -1250,8 +1256,10 @@ struct sw_flow_actions *ovs_nla_alloc_flow_actions(int size)
|
|
|
{
|
|
|
struct sw_flow_actions *sfa;
|
|
|
|
|
|
- if (size > MAX_ACTIONS_BUFSIZE)
|
|
|
+ if (size > MAX_ACTIONS_BUFSIZE) {
|
|
|
+ OVS_NLERR("Flow action size (%u bytes) exceeds maximum", size);
|
|
|
return ERR_PTR(-EINVAL);
|
|
|
+ }
|
|
|
|
|
|
sfa = kmalloc(sizeof(*sfa) + size, GFP_KERNEL);
|
|
|
if (!sfa)
|
|
@@ -1786,6 +1794,7 @@ static int ovs_nla_copy_actions__(const struct nlattr *attr,
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
+ OVS_NLERR("Unknown tunnel attribute (%d).\n", type);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
if (!skip_copy) {
|