Convert intel uncore to struct_size
authorMatthew Wilcox <mawilcox@microsoft.com>
Thu, 7 Jun 2018 14:57:20 +0000 (07:57 -0700)
committerKees Cook <keescook@chromium.org>
Tue, 12 Jun 2018 23:19:22 +0000 (16:19 -0700)
Need to do a bit of rearranging to make this work.

Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
arch/x86/events/intel/uncore.c

index 15b0737..e15cfad 100644 (file)
@@ -865,8 +865,6 @@ static void uncore_types_exit(struct intel_uncore_type **types)
 static int __init uncore_type_init(struct intel_uncore_type *type, bool setid)
 {
        struct intel_uncore_pmu *pmus;
-       struct attribute_group *attr_group;
-       struct attribute **attrs;
        size_t size;
        int i, j;
 
@@ -891,21 +889,24 @@ static int __init uncore_type_init(struct intel_uncore_type *type, bool setid)
                                0, type->num_counters, 0, 0);
 
        if (type->event_descs) {
+               struct {
+                       struct attribute_group group;
+                       struct attribute *attrs[];
+               } *attr_group;
                for (i = 0; type->event_descs[i].attr.attr.name; i++);
 
-               attr_group = kzalloc(sizeof(struct attribute *) * (i + 1) +
-                                       sizeof(*attr_group), GFP_KERNEL);
+               attr_group = kzalloc(struct_size(attr_group, attrs, i + 1),
+                                                               GFP_KERNEL);
                if (!attr_group)
                        goto err;
 
-               attrs = (struct attribute **)(attr_group + 1);
-               attr_group->name = "events";
-               attr_group->attrs = attrs;
+               attr_group->group.name = "events";
+               attr_group->group.attrs = attr_group->attrs;
 
                for (j = 0; j < i; j++)
-                       attrs[j] = &type->event_descs[j].attr.attr;
+                       attr_group->attrs[j] = &type->event_descs[j].attr.attr;
 
-               type->events_group = attr_group;
+               type->events_group = &attr_group->group;
        }
 
        type->pmu_group = &uncore_pmu_attr_group;