Every object type defines an attr_policy array, so deny setting
attributes for object types which don't have it present or if it
specifies a non-zero maxlen which is lower than the given data_len.
Signed-off-by: Phil Sutter <phil@nwl.cc>
default:
if (!obj->ops ||
attr < NFTNL_OBJ_BASE ||
- attr > obj->ops->nftnl_max_attr)
+ attr > obj->ops->nftnl_max_attr ||
+ !obj->ops->attr_policy)
+ return -1;
+
+ if (obj->ops->attr_policy[attr].maxlen &&
+ obj->ops->attr_policy[attr].maxlen < data_len)
return -1;
if (obj->ops->set(obj, attr, data, data_len) < 0)