diff options
Diffstat (limited to 'recipes/linux/linux-omap-psp-2.6.32/pending/0006-modules-Skip-empty-sections-when-exporting-section.patch')
-rw-r--r-- | recipes/linux/linux-omap-psp-2.6.32/pending/0006-modules-Skip-empty-sections-when-exporting-section.patch | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/recipes/linux/linux-omap-psp-2.6.32/pending/0006-modules-Skip-empty-sections-when-exporting-section.patch b/recipes/linux/linux-omap-psp-2.6.32/pending/0006-modules-Skip-empty-sections-when-exporting-section.patch new file mode 100644 index 0000000000..3ca7d2ef2b --- /dev/null +++ b/recipes/linux/linux-omap-psp-2.6.32/pending/0006-modules-Skip-empty-sections-when-exporting-section.patch @@ -0,0 +1,84 @@ +From 412656ce83a2605119dc1a7bc5492a13240dc666 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings <ben@decadent.org.uk> +Date: Sat, 19 Dec 2009 14:43:01 +0000 +Subject: [PATCH 6/9] modules: Skip empty sections when exporting section notes + +Commit 35dead4 "modules: don't export section names of empty sections +via sysfs" changed the set of sections that have attributes, but did +not change the iteration over these attributes in add_notes_attrs(). +This can lead to add_notes_attrs() creating attributes with the wrong +names or with null name pointers. + +Introduce a sect_empty() function and use it in both add_sect_attrs() +and add_notes_attrs(). + +Reported-by: Martin Michlmayr <tbm@cyrius.com> +Signed-off-by: Ben Hutchings <ben@decadent.org.uk> +Tested-by: Martin Michlmayr <tbm@cyrius.com> +Cc: stable@kernel.org +Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> +Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> +Signed-off-by: Sanjeev Premi <premi@ti.com> +--- + kernel/module.c | 17 ++++++++++------- + 1 files changed, 10 insertions(+), 7 deletions(-) + +diff --git a/kernel/module.c b/kernel/module.c +index 12afc5a..a1b4a43 100644 +--- a/kernel/module.c ++++ b/kernel/module.c +@@ -996,6 +996,12 @@ static const struct kernel_symbol *resolve_symbol(Elf_Shdr *sechdrs, + * J. Corbet <corbet@lwn.net> + */ + #if defined(CONFIG_KALLSYMS) && defined(CONFIG_SYSFS) ++ ++static inline bool sect_empty(const Elf_Shdr *sect) ++{ ++ return !(sect->sh_flags & SHF_ALLOC) || sect->sh_size == 0; ++} ++ + struct module_sect_attr + { + struct module_attribute mattr; +@@ -1037,8 +1043,7 @@ 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 +- && sechdrs[i].sh_size) ++ if (!sect_empty(&sechdrs[i])) + nloaded++; + size[0] = ALIGN(sizeof(*sect_attrs) + + nloaded * sizeof(sect_attrs->attrs[0]), +@@ -1056,9 +1061,7 @@ static void add_sect_attrs(struct module *mod, unsigned int nsect, + sattr = §_attrs->attrs[0]; + gattr = §_attrs->grp.attrs[0]; + for (i = 0; i < nsect; i++) { +- if (! (sechdrs[i].sh_flags & SHF_ALLOC)) +- continue; +- if (!sechdrs[i].sh_size) ++ if (sect_empty(&sechdrs[i])) + continue; + sattr->address = sechdrs[i].sh_addr; + sattr->name = kstrdup(secstrings + sechdrs[i].sh_name, +@@ -1142,7 +1145,7 @@ static void add_notes_attrs(struct module *mod, unsigned int nsect, + /* Count notes sections and allocate structures. */ + notes = 0; + for (i = 0; i < nsect; i++) +- if ((sechdrs[i].sh_flags & SHF_ALLOC) && ++ if (!sect_empty(&sechdrs[i]) && + (sechdrs[i].sh_type == SHT_NOTE)) + ++notes; + +@@ -1158,7 +1161,7 @@ static void add_notes_attrs(struct module *mod, unsigned int nsect, + notes_attrs->notes = notes; + nattr = ¬es_attrs->attrs[0]; + for (loaded = i = 0; i < nsect; ++i) { +- if (!(sechdrs[i].sh_flags & SHF_ALLOC)) ++ if (sect_empty(&sechdrs[i])) + continue; + if (sechdrs[i].sh_type == SHT_NOTE) { + nattr->attr.name = mod->sect_attrs->attrs[loaded].name; +-- +1.6.2.4 + |