@@ -58,34 +58,37 @@ static void free_sect_attrs(struct module_sect_attrs *sect_attrs)
58
58
59
59
for (bin_attr = sect_attrs -> grp .bin_attrs ; * bin_attr ; bin_attr ++ )
60
60
kfree ((* bin_attr )-> attr .name );
61
+ kfree (sect_attrs -> grp .bin_attrs );
61
62
kfree (sect_attrs );
62
63
}
63
64
64
65
static int add_sect_attrs (struct module * mod , const struct load_info * info )
65
66
{
66
- unsigned int nloaded = 0 , i , size [2 ];
67
67
struct module_sect_attrs * sect_attrs ;
68
68
struct bin_attribute * * gattr ;
69
69
struct bin_attribute * sattr ;
70
+ unsigned int nloaded = 0 , i ;
70
71
int ret ;
71
72
72
73
/* Count loaded sections and allocate structures */
73
74
for (i = 0 ; i < info -> hdr -> e_shnum ; i ++ )
74
75
if (!sect_empty (& info -> sechdrs [i ]))
75
76
nloaded ++ ;
76
- size [0 ] = ALIGN (struct_size (sect_attrs , attrs , nloaded ),
77
- sizeof (sect_attrs -> grp .bin_attrs [0 ]));
78
- size [1 ] = (nloaded + 1 ) * sizeof (sect_attrs -> grp .bin_attrs [0 ]);
79
- sect_attrs = kzalloc (size [0 ] + size [1 ], GFP_KERNEL );
77
+ sect_attrs = kzalloc (struct_size (sect_attrs , attrs , nloaded ), GFP_KERNEL );
80
78
if (!sect_attrs )
81
79
return - ENOMEM ;
82
80
81
+ gattr = kcalloc (nloaded + 1 , sizeof (* gattr ), GFP_KERNEL );
82
+ if (!gattr ) {
83
+ kfree (sect_attrs );
84
+ return - ENOMEM ;
85
+ }
86
+
83
87
/* Setup section attributes. */
84
88
sect_attrs -> grp .name = "sections" ;
85
- sect_attrs -> grp .bin_attrs = ( void * ) sect_attrs + size [ 0 ] ;
89
+ sect_attrs -> grp .bin_attrs = gattr ;
86
90
87
91
sattr = & sect_attrs -> attrs [0 ];
88
- gattr = & sect_attrs -> grp .bin_attrs [0 ];
89
92
for (i = 0 ; i < info -> hdr -> e_shnum ; i ++ ) {
90
93
Elf_Shdr * sec = & info -> sechdrs [i ];
91
94
@@ -104,7 +107,6 @@ static int add_sect_attrs(struct module *mod, const struct load_info *info)
104
107
sattr -> attr .mode = 0400 ;
105
108
* (gattr ++ ) = sattr ++ ;
106
109
}
107
- * gattr = NULL ;
108
110
109
111
ret = sysfs_create_group (& mod -> mkobj .kobj , & sect_attrs -> grp );
110
112
if (ret )
0 commit comments