X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fbrcompat.c;h=2113eae0f7a39fed65128a8bb6fcf56fa1ab749d;hb=6aa7dc839706a453f128a00f9040b31c597cfcfe;hp=44b2c9923e4f8dd1a313a07060abd1ed4f5bc751;hpb=f2d9c30bdf455d8ce6dbf2188c1330e4b33d7d1f;p=openvswitch diff --git a/datapath/brcompat.c b/datapath/brcompat.c index 44b2c992..2113eae0 100644 --- a/datapath/brcompat.c +++ b/datapath/brcompat.c @@ -6,6 +6,8 @@ * kernel, by Linus Torvalds and others. */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include #include #include @@ -82,6 +84,9 @@ static int brc_add_del_bridge(char __user *uname, int add) struct sk_buff *request; char name[IFNAMSIZ]; + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + if (copy_from_user(name, uname, IFNAMSIZ)) return -EFAULT; @@ -194,6 +199,9 @@ static int brc_add_del_port(struct net_device *dev, int port_ifindex, int add) struct net_device *port; int err; + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + port = __dev_get_by_index(&init_net, port_ifindex); if (!port) return -EINVAL; @@ -252,7 +260,7 @@ static int brc_get_port_list(struct net_device *dev, int __user *uindices, * (limited to a page for sanity) * offset -- number of records to skip */ -static int brc_get_fdb_entries(struct net_device *dev, void __user *userbuf, +static int brc_get_fdb_entries(struct net_device *dev, void __user *userbuf, unsigned long maxnum, unsigned long offset) { struct nlattr *attrs[BRC_GENL_A_MAX + 1]; @@ -370,7 +378,7 @@ static int brc_genl_query(struct sk_buff *skb, struct genl_info *info) void *data; ans_skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!ans_skb) + if (!ans_skb) return -ENOMEM; data = genlmsg_put_reply(ans_skb, info, &brc_genl_family, @@ -481,7 +489,7 @@ static struct sk_buff *brc_send_command(struct sk_buff *request, /* Wait for reply. */ error = -ETIMEDOUT; if (!wait_for_completion_timeout(&brc_done, BRC_TIMEOUT)) { - printk(KERN_WARNING "brcompat: timed out waiting for userspace\n"); + pr_warn("timed out waiting for userspace\n"); goto error; } @@ -530,15 +538,15 @@ static int __init brc_init(void) goto error; err = genl_register_ops(&brc_genl_family, &brc_genl_ops_query_dp); - if (err != 0) + if (err != 0) goto err_unregister; err = genl_register_ops(&brc_genl_family, &brc_genl_ops_dp_result); - if (err != 0) + if (err != 0) goto err_unregister; err = genl_register_ops(&brc_genl_family, &brc_genl_ops_set_proc); - if (err != 0) + if (err != 0) goto err_unregister; strcpy(brc_mc_group.name, "brcompat"); @@ -551,7 +559,7 @@ static int __init brc_init(void) err_unregister: genl_unregister_family(&brc_genl_family); error: - printk(KERN_EMERG "brcompat: failed to install!"); + pr_emerg("failed to install!\n"); return err; }