return *dirp;
}
+/* Maximum length of the BRC_GENL_A_PROC_DIR and BRC_GENL_A_PROC_NAME strings.
+ * If we could depend on supporting NLA_NUL_STRING and the .len member in
+ * Generic Netlink policy, then we could just put this in brc_genl_policy (and
+ * simplify brc_genl_set_proc() below too), but upstream 2.6.18 does not have
+ * either. */
+#define BRC_NAME_LEN_MAX 32
+
int brc_genl_set_proc(struct sk_buff *skb, struct genl_info *info)
{
struct proc_dir_entry *dir, *entry;
const char *dir_name, *name;
char *data;
- /* The following would be much simpler if we could depend on supporting
- * NLA_NUL_STRING and the .len member in Generic Netlink policy, but
- * upstream 2.6.18 does not have either. */
if (!info->attrs[BRC_GENL_A_PROC_DIR] ||
VERIFY_NUL_STRING(info->attrs[BRC_GENL_A_PROC_DIR]) ||
!info->attrs[BRC_GENL_A_PROC_NAME] ||
dir_name = nla_data(info->attrs[BRC_GENL_A_PROC_DIR]);
name = nla_data(info->attrs[BRC_GENL_A_PROC_NAME]);
- if (strlen(dir_name) > 32 || strlen(name) > 32)
+ if (strlen(dir_name) > BRC_NAME_LEN_MAX ||
+ strlen(name) > BRC_NAME_LEN_MAX)
return -EINVAL;
if (!strcmp(dir_name, "net/vlan"))
for (;;) {
struct proc_dir_entry *e;
char *data;
- char name[33];
+ char name[BRC_NAME_LEN_MAX + 1];
e = dir->subdir;
if (!e)
if (e->namelen >= sizeof name) {
/* Can't happen: we prevent adding names this long by
- * limiting the BRC_GENL_A_PROC_NAME string to 32
- * bytes. */
+ * limiting the BRC_GENL_A_PROC_NAME string to
+ * BRC_NAME_LEN_MAX bytes. */
WARN_ON(1);
break;
}