modules: don't export section names of empty sections via sysfs
PATCH 1/1 modules: don't export section names of empty sections via sysfs
[PATCH] modules: don't export section names of empty sections via sysfs
On the parisc architecture we face for each and every loaded kernel module this kernel "badness warning":
sysfs: cannot create duplicate filename '/module/ac97_bus/sections/.text' Badness at fs/sysfs/dir.c:487
Reason for that is, that on parisc all kernel modules do have multiple .text sections due to the usage of the -ffunction-sections compiler flag which is needed to reach all jump targets on this platform.
An objdump on such a kernel module gives:
Sections:
Idx Name Size VMA LMA File off Algn
0 .note.gnu.build-id 00000024 00000000 00000000 00000034 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .text 00000000 00000000 00000000 00000058 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .text.ac97_bus_match 0000001c 00000000 00000000 00000058 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
3 .text 00000000 00000000 00000000 000000d4 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
...
Since the .text sections are empty (size of 0 bytes) and won't be loaded by the kernel module loader anyway, I don't see a reason why such sections need to be listed under /sys/module/<module_name>/sections/<section_name> either.
The attached patch does solve this issue by not exporting section names which are empty.
This fixes bugzilla http://bugzilla.kernel.org/show_bug.cgi?id=14703
kernel/module.c +4 -1
@@ -1187,7 +1187,8 @@ static void add_sect_attrs(struct module *mod, unsigned int nsect,/* Count loaded sections and allocate structures */ for (i =0 ; i < nsect; i++) -if (sechdrs[i].sh_flags &SHF_ALLOC ) +if (sechdrs[i].sh_flags &SHF_ALLOC + && sechdrs[i].sh_size) nloaded++; size[0] = ALIGN(sizeof(*sect_attrs) + nloaded * sizeof(sect_attrs->attrs[0]),
@@ -1207,6 +1208,8 @@ static void add_sect_attrs(struct module *mod, unsigned int nsect,for (i =0 ; i < nsect; i++) {if (! (sechdrs[i].sh_flags &SHF_ALLOC ))continue ; +if (!sechdrs[i].sh_size) +continue ; sattr->address = sechdrs[i].sh_addr; sattr->name =kstrdup (secstrings + sechdrs[i].sh_name,GFP_KERNEL );
Rusty Russell
AppliedQuoted 1 line · Helge Deller
[PATCH] modules: don't export section names of empty sections via sysfs
Thanks, applied.
Ah, I see Linus snuck this in before the release. Excellent. Rusty.
Quoted 6 lines · Rusty Russell
Quoted 1 line · Helge Deller
[PATCH] modules: don't export section names of empty sections via sysfs
Thanks, applied.
Ah, I see Linus snuck this in before the release. Excellent.
That's great. The next step is probably to find out why the toolchain is doing this ... generating zero length allocated segments seems to be somewhat deviant behaviour ...
James
Quoted 8 lines · Rusty Russell
Quoted 1 line · Helge Deller
[PATCH] modules: don't export section names of empty sections via sysfs
Thanks, applied.
Ah, I see Linus snuck this in before the release. Excellent. Rusty.
Thanks Rusty, Helge!
cheers, Kyle