/*
- * Copyright (c) 2009, 2010 Nicira Networks.
+ * Copyright (c) 2009, 2010, 2011 Nicira Networks.
* Distributed under the terms of the GNU GPL version 2.
*
* Significant portions of this file may be copied from parts of the Linux
* kernel, by Linus Torvalds and others.
*/
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/netdevice.h>
if (!*dirp) {
struct proc_dir_entry *dir;
if (brc_lookup_entry(parent, dir_name)) {
- printk(KERN_WARNING "%s proc directory exists, can't "
- "simulate--probably its real module is "
- "loaded\n", dir_name);
+ pr_warn("%s proc directory exists, can't simulate--"
+ "probably its real module is loaded\n",
+ dir_name);
return NULL;
}
dir = *dirp = proc_mkdir(dir_name, parent);
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;
char *data;
if (!info->attrs[BRC_GENL_A_PROC_DIR] ||
- VERIFY_NUL_STRING(info->attrs[BRC_GENL_A_PROC_DIR]) ||
+ VERIFY_NUL_STRING(info->attrs[BRC_GENL_A_PROC_DIR], BRC_NAME_LEN_MAX) ||
!info->attrs[BRC_GENL_A_PROC_NAME] ||
- VERIFY_NUL_STRING(info->attrs[BRC_GENL_A_PROC_NAME]) ||
+ VERIFY_NUL_STRING(info->attrs[BRC_GENL_A_PROC_NAME], BRC_NAME_LEN_MAX) ||
(info->attrs[BRC_GENL_A_PROC_DATA] &&
- VERIFY_NUL_STRING(info->attrs[BRC_GENL_A_PROC_DATA])))
+ VERIFY_NUL_STRING(info->attrs[BRC_GENL_A_PROC_DATA], INT_MAX)))
return -EINVAL;
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) > BRC_NAME_LEN_MAX ||
- strlen(name) > BRC_NAME_LEN_MAX)
- return -EINVAL;
if (!strcmp(dir_name, "net/vlan"))
dir = brc_open_dir("vlan", proc_net, &proc_vlan_dir);
if (!e)
break;
- if (e->namelen >= sizeof name) {
+ if (e->namelen >= sizeof(name)) {
/* Can't happen: we prevent adding names this long by
* limiting the BRC_GENL_A_PROC_NAME string to
* BRC_NAME_LEN_MAX bytes. */