net: dsa: don't leave dangling pointers in dp->pl when failing
[linux-2.6-microblaze.git] / net / openvswitch / meter.c
index 04a060a..6e38f68 100644 (file)
@@ -343,7 +343,7 @@ static struct dp_meter *dp_meter_create(struct nlattr **a)
                        return ERR_PTR(-EINVAL);
 
        /* Allocate and set up the meter before locking anything. */
-       meter = kzalloc(struct_size(meter, bands, n_bands), GFP_KERNEL);
+       meter = kzalloc(struct_size(meter, bands, n_bands), GFP_KERNEL_ACCOUNT);
        if (!meter)
                return ERR_PTR(-ENOMEM);
 
@@ -687,9 +687,9 @@ static const struct genl_small_ops dp_meter_genl_ops[] = {
        },
        { .cmd = OVS_METER_CMD_SET,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
-               .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN
-                                          *  privilege.
-                                          */
+               .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN
+                                              *  privilege.
+                                              */
                .doit = ovs_meter_cmd_set,
        },
        { .cmd = OVS_METER_CMD_GET,
@@ -699,9 +699,9 @@ static const struct genl_small_ops dp_meter_genl_ops[] = {
        },
        { .cmd = OVS_METER_CMD_DEL,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
-               .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN
-                                          *  privilege.
-                                          */
+               .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN
+                                              *  privilege.
+                                              */
                .doit = ovs_meter_cmd_del
        },
 };
@@ -720,6 +720,7 @@ struct genl_family dp_meter_genl_family __ro_after_init = {
        .parallel_ops = true,
        .small_ops = dp_meter_genl_ops,
        .n_small_ops = ARRAY_SIZE(dp_meter_genl_ops),
+       .resv_start_op = OVS_METER_CMD_GET + 1,
        .mcgrps = &ovs_meter_multicast_group,
        .n_mcgrps = 1,
        .module = THIS_MODULE,