public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/1] module: fix symbol versioning with symbol prefixes
@ 2013-03-12 15:09 James Hogan
  2013-03-13 23:51 ` Rusty Russell
  0 siblings, 1 reply; 3+ messages in thread
From: James Hogan @ 2013-03-12 15:09 UTC (permalink / raw)
  To: Rusty Russell
  Cc: linux-kernel, James Hogan, Michal Marek, Sam Ravnborg,
	Greg Kroah-Hartman, Jonathan Kliegman

Fix symbol versioning on architectures with symbol prefixes. Although
the build was free from warnings the actual modules still wouldn't load
as the ____versions table contained unprefixed symbol names, which were
being compared against the prefixed symbol names when checking the
symbol versions.

This is fixed by modifying modpost to add the symbol prefix to the
____versions table it outputs (Modules.symvers still contains unprefixed
symbol names). The check_modstruct_version() function is also fixed as
it checks the version of the unprefixed "module_layout" symbol which
would no longer work.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Michal Marek <mmarek@suse.cz>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jonathan Kliegman <kliegs@chromium.org>
---
This conflicts with Rusty's "CONFIG_SYMBOL_PREFIX: cleanup" patch.

 kernel/module.c       | 3 ++-
 scripts/mod/modpost.c | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/kernel/module.c b/kernel/module.c
index 0925c9a..e64fcce 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1212,7 +1212,8 @@ static inline int check_modstruct_version(Elf_Shdr *sechdrs,
 	if (!find_symbol(MODULE_SYMBOL_PREFIX "module_layout", NULL,
 			 &crc, true, false))
 		BUG();
-	return check_version(sechdrs, versindex, "module_layout", mod, crc,
+	return check_version(sechdrs, versindex,
+			     MODULE_SYMBOL_PREFIX "module_layout", mod, crc,
 			     NULL);
 }
 
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 78b30c1..b454156 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -1934,7 +1934,8 @@ static int add_versions(struct buffer *b, struct module *mod)
 				s->name, mod->name);
 			continue;
 		}
-		buf_printf(b, "\t{ %#8x, \"%s\" },\n", s->crc, s->name);
+		buf_printf(b, "\t{ %#8x, \"%s%s\" },\n", s->crc,
+			   MODULE_SYMBOL_PREFIX, s->name);
 	}
 
 	buf_printf(b, "};\n");
-- 
1.8.1.2



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/1] module: fix symbol versioning with symbol prefixes
  2013-03-12 15:09 [PATCH 1/1] module: fix symbol versioning with symbol prefixes James Hogan
@ 2013-03-13 23:51 ` Rusty Russell
  2013-03-14  9:21   ` James Hogan
  0 siblings, 1 reply; 3+ messages in thread
From: Rusty Russell @ 2013-03-13 23:51 UTC (permalink / raw)
  To: James Hogan
  Cc: linux-kernel, James Hogan, Michal Marek, Sam Ravnborg,
	Greg Kroah-Hartman, Jonathan Kliegman

James Hogan <james.hogan@imgtec.com> writes:
> Fix symbol versioning on architectures with symbol prefixes. Although
> the build was free from warnings the actual modules still wouldn't load
> as the ____versions table contained unprefixed symbol names, which were
> being compared against the prefixed symbol names when checking the
> symbol versions.
>
> This is fixed by modifying modpost to add the symbol prefix to the
> ____versions table it outputs (Modules.symvers still contains unprefixed
> symbol names). The check_modstruct_version() function is also fixed as
> it checks the version of the unprefixed "module_layout" symbol which
> would no longer work.

Hmm, this has always been broken, right?  And noone noticed?  Unless you
really want it now, I'll queue it for *next* merge window.

I've applied it (reworked) to my pending-rebases queue, and will put it
in modules-next once the cleanup goes in.

Thanks,
Rusty.

From: James Hogan <james.hogan@imgtec.com>
Subject: module: fix symbol versioning with symbol prefixes

Fix symbol versioning on architectures with symbol prefixes. Although
the build was free from warnings the actual modules still wouldn't load
as the ____versions table contained unprefixed symbol names, which were
being compared against the prefixed symbol names when checking the
symbol versions.

This is fixed by modifying modpost to add the symbol prefix to the
____versions table it outputs (Modules.symvers still contains unprefixed
symbol names). The check_modstruct_version() function is also fixed as
it checks the version of the unprefixed "module_layout" symbol which
would no longer work.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Michal Marek <mmarek@suse.cz>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jonathan Kliegman <kliegs@chromium.org>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (updated for cleanup)

diff --git a/kernel/module.c b/kernel/module.c
index cfd4a3f..3c2c72d 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1212,7 +1212,8 @@ static inline int check_modstruct_version(Elf_Shdr *sechdrs,
 	if (!find_symbol(VMLINUX_SYMBOL_STR(module_layout), NULL,
 			 &crc, true, false))
 		BUG();
-	return check_version(sechdrs, versindex, "module_layout", mod, crc,
+	return check_version(sechdrs, versindex,
+			     VMLINUX_SYMBOL_STR(module_layout), mod, crc,
 			     NULL);
 }
 
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 6985021..909b5e7 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -1927,7 +1927,8 @@ static int add_versions(struct buffer *b, struct module *mod)
 				s->name, mod->name);
 			continue;
 		}
-		buf_printf(b, "\t{ %#8x, \"%s\" },\n", s->crc, s->name);
+		buf_printf(b, "\t{ %#8x, \"%s%s\" },\n", s->crc,
+			   VMLINUX_SYMBOL_PREFIX_STR, s->name);
 	}
 
 	buf_printf(b, "};\n");

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/1] module: fix symbol versioning with symbol prefixes
  2013-03-13 23:51 ` Rusty Russell
@ 2013-03-14  9:21   ` James Hogan
  0 siblings, 0 replies; 3+ messages in thread
From: James Hogan @ 2013-03-14  9:21 UTC (permalink / raw)
  To: Rusty Russell
  Cc: linux-kernel, Michal Marek, Sam Ravnborg, Greg Kroah-Hartman,
	Jonathan Kliegman

On 13/03/13 23:51, Rusty Russell wrote:
> James Hogan <james.hogan@imgtec.com> writes:
>> Fix symbol versioning on architectures with symbol prefixes. Although
>> the build was free from warnings the actual modules still wouldn't load
>> as the ____versions table contained unprefixed symbol names, which were
>> being compared against the prefixed symbol names when checking the
>> symbol versions.
>>
>> This is fixed by modifying modpost to add the symbol prefix to the
>> ____versions table it outputs (Modules.symvers still contains unprefixed
>> symbol names). The check_modstruct_version() function is also fixed as
>> it checks the version of the unprefixed "module_layout" symbol which
>> would no longer work.
> 
> Hmm, this has always been broken, right?  And noone noticed?  Unless you
> really want it now, I'll queue it for *next* merge window.

Yes, that's fine by me.

> I've applied it (reworked) to my pending-rebases queue, and will put it
> in modules-next once the cleanup goes in.

Thanks
James


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-03-14  9:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-12 15:09 [PATCH 1/1] module: fix symbol versioning with symbol prefixes James Hogan
2013-03-13 23:51 ` Rusty Russell
2013-03-14  9:21   ` James Hogan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox