summaryrefslogtreecommitdiff
path: root/recipes/linux/linux-omap-psp-2.6.32/pending/0006-modules-Skip-empty-sections-when-exporting-section.patch
diff options
context:
space:
mode:
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.patch84
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 = &sect_attrs->attrs[0];
+ gattr = &sect_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 = &notes_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
+