[kernel] r14842 - in dists/trunk/linux-2.6/debian: . patches/bugfix/all patches/series

Ben Hutchings benh at alioth.debian.org
Sat Jan 2 20:30:02 UTC 2010


Author: benh
Date: Sat Jan  2 20:29:59 2010
New Revision: 14842

Log:
modules: Skip empty sections when exporting section notes (Closes: #563036)

Added:
   dists/trunk/linux-2.6/debian/patches/bugfix/all/modules-Skip-empty-section-notes.patch
   dists/trunk/linux-2.6/debian/patches/series/4
Modified:
   dists/trunk/linux-2.6/debian/changelog

Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	Sat Jan  2 11:23:43 2010	(r14841)
+++ dists/trunk/linux-2.6/debian/changelog	Sat Jan  2 20:29:59 2010	(r14842)
@@ -3,6 +3,8 @@
   [ Ben Hutchings ]
   * Correct comments referring to dpkg --print-installation-architecture
     in maintainer scripts (Closes: #558077)
+  * modules: Skip empty sections when exporting section notes
+    (Closes: #563036)
 
   [ maximilian attems ]
   * topconfig set CAN_EMS_USB, BT_MRVL, BT_MRVL_SDIO, BE2ISCSI, SCSI_PMCRAID,

Added: dists/trunk/linux-2.6/debian/patches/bugfix/all/modules-Skip-empty-section-notes.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/modules-Skip-empty-section-notes.patch	Sat Jan  2 20:29:59 2010	(r14842)
@@ -0,0 +1,81 @@
+From 34c7e88db240e008758b97368d6f07631b017c92 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Fri, 18 Dec 2009 23:03:03 +0000
+Subject: [PATCH] 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 at cyrius.com>
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+Tested-by: Martin Michlmayr <tbm at cyrius.com>
+Cc: stable at kernel.org
+---
+ kernel/module.c |   17 ++++++++++-------
+ 1 files changed, 10 insertions(+), 7 deletions(-)
+
+diff --git a/kernel/module.c b/kernel/module.c
+index e96b8ed..f82386b 100644
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -1010,6 +1010,12 @@ static const struct kernel_symbol *resolve_symbol(Elf_Shdr *sechdrs,
+  * J. Corbet <corbet at 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;
+@@ -1051,8 +1057,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]),
+@@ -1070,9 +1075,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,
+@@ -1156,7 +1159,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;
+ 
+@@ -1172,7 +1175,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.5.7
+

Added: dists/trunk/linux-2.6/debian/patches/series/4
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/series/4	Sat Jan  2 20:29:59 2010	(r14842)
@@ -0,0 +1 @@
++ bugfix/all/modules-Skip-empty-section-notes.patch



More information about the Kernel-svn-changes mailing list