From: Rusty Russell <rusty@rustcorp.com.au>
To: Jeff Arnold <jbarnold@mit.edu>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org,
Denys Vlasenko <vda.linux@googlemail.com>,
Tim Abbott <tabbott@mit.edu>, Anders Kaseorg <andersk@mit.edu>,
Waseem Daher <wdaher@mit.edu>,
Nikanth Karthikesan <knikanth@suse.de>
Subject: Re: [PATCH 3/7] Ksplice: Make find_symbol return a struct kernel_symbol
Date: Wed, 4 Feb 2009 19:56:13 +1030 [thread overview]
Message-ID: <200902041956.13958.rusty@rustcorp.com.au> (raw)
In-Reply-To: <1228521840-3886-4-git-send-email-jbarnold@mit.edu>
On Saturday 06 December 2008 10:33:56 Jeff Arnold wrote:
> From: Tim Abbott <tabbott@mit.edu>
>
> Ksplice needs access to the kernel_symbol structure in order to support
> modifications to the exported symbol table.
Applied, with some fixes:
> preempt_disable();
> - if (IS_ERR_VALUE(find_symbol(symbol, &owner, NULL, true, false)))
> + if (find_symbol(symbol, &owner, NULL, true, false) == NULL)
> BUG();
I skipped the == NULL part; if (find_symbol... reads quite well. Same with
three or so other places.
> - ret = find_symbol(name, &owner, &crc,
> + sym = find_symbol(name, &owner, &crc,
> !(mod->taints & (1 << TAINT_PROPRIETARY_MODULE)), true);
> - if (!IS_ERR_VALUE(ret)) {
> - /* use_module can fail due to OOM,
> - or module initialization or unloading */
> - if (!check_version(sechdrs, versindex, name, mod, crc) ||
> - !use_module(mod, owner))
> - ret = -EINVAL;
> - }
> - return ret;
> + /* use_module can fail due to OOM,
> + or module initialization or unloading */
> + if (!check_version(sechdrs, versindex, name, mod, crc) ||
> + !use_module(mod, owner))
> + sym = NULL;
> + return sym;
> }
If sym is NULL those other values aren't valid! You can't take out the
branch....
> - return (void *)value;
> + return sym == NULL ? (void *)0 : (void *)sym->value;
> }
One NULL too many, and one too few:
return sym ? (void *)sym->value : NULL;
Here's the nett diff:
diff --git a/kernel/module.c b/kernel/module.c
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -860,7 +860,7 @@ void __symbol_put(const char *symbol)
struct module *owner;
preempt_disable();
- if (find_symbol(symbol, &owner, NULL, true, false) == NULL)
+ if (!find_symbol(symbol, &owner, NULL, true, false))
BUG();
module_put(owner);
preempt_enable();
@@ -1023,7 +1023,7 @@ static inline int check_modstruct_versio
{
const unsigned long *crc;
- if (find_symbol("struct_module", NULL, &crc, true, false) == NULL)
+ if (!find_symbol("struct_module", NULL, &crc, true, false))
BUG();
return check_version(sechdrs, versindex, "struct_module", mod, crc);
}
@@ -1077,9 +1077,11 @@ static const struct kernel_symbol *resol
!(mod->taints & (1 << TAINT_PROPRIETARY_MODULE)), true);
/* use_module can fail due to OOM,
or module initialization or unloading */
- if (!check_version(sechdrs, versindex, name, mod, crc) ||
- !use_module(mod, owner))
- sym = NULL;
+ if (sym) {
+ if (!check_version(sechdrs, versindex, name, mod, crc) ||
+ !use_module(mod, owner))
+ sym = NULL;
+ }
return sym;
}
@@ -1481,11 +1483,11 @@ void *__symbol_get(const char *symbol)
preempt_disable();
sym = find_symbol(symbol, &owner, NULL, true, true);
- if (sym != NULL && strong_try_module_get(owner))
+ if (sym && strong_try_module_get(owner))
sym = NULL;
preempt_enable();
- return sym == NULL ? (void *)0 : (void *)sym->value;
+ return sym ? (void *)sym->value : NULL;
}
EXPORT_SYMBOL_GPL(__symbol_get);
@@ -1513,8 +1515,7 @@ static int verify_export_symbols(struct
for (i = 0; i < ARRAY_SIZE(arr); i++) {
for (s = arr[i].sym; s < arr[i].sym + arr[i].num; s++) {
- if (find_symbol(s->name, &owner, NULL, true, false)
- != NULL) {
+ if (find_symbol(s->name, &owner, NULL, true, false)) {
printk(KERN_ERR
"%s: exports duplicate symbol %s"
" (owned by %s)\n",
@@ -1561,7 +1562,7 @@ static int simplify_symbols(Elf_Shdr *se
ksym = resolve_symbol(sechdrs, versindex,
strtab + sym[i].st_name, mod);
/* Ok if resolved. */
- if (ksym != NULL) {
+ if (ksym) {
sym[i].st_value = ksym->value;
break;
}
next prev parent reply other threads:[~2009-02-04 9:26 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-06 0:03 [PATCH 0/7] Ksplice: Rebootless kernel updates Jeff Arnold
2008-12-06 0:03 ` [PATCH 1/7] Make section names compatible with -ffunction-sections -fdata-sections Jeff Arnold
2008-12-06 0:03 ` [PATCH 2/7] x86: Add an option to compile " Jeff Arnold
2008-12-06 0:03 ` [PATCH 3/7] Ksplice: Make find_symbol return a struct kernel_symbol Jeff Arnold
2008-12-06 0:03 ` [PATCH 4/7] Ksplice: Add module_data_address (the analogue of module_text_address) Jeff Arnold
2008-12-06 0:03 ` [PATCH 5/7] Ksplice: Add functions for walking kallsyms symbols Jeff Arnold
2008-12-06 0:03 ` [PATCH 6/7] Ksplice: Export symbols needed for Ksplice Jeff Arnold
2008-12-06 0:04 ` [PATCH 7/7] Ksplice: Support updating x86-32 and x86-64 Jeff Arnold
2008-12-17 5:41 ` Theodore Tso
2008-12-18 2:09 ` Tim Abbott
2009-02-07 2:36 ` Rusty Russell
2009-02-10 1:01 ` Tim Abbott
2009-02-04 11:35 ` [PATCH 6/7] Ksplice: Export symbols needed for Ksplice Rusty Russell
2009-02-13 1:46 ` Tim Abbott
2009-02-16 7:11 ` Rusty Russell
2009-02-04 11:30 ` [PATCH 5/7] Ksplice: Add functions for walking kallsyms symbols Rusty Russell
2009-02-04 21:31 ` Anders Kaseorg
2009-02-04 11:21 ` [PATCH 4/7] Ksplice: Add module_data_address (the analogue of module_text_address) Rusty Russell
2009-02-04 20:48 ` Anders Kaseorg
2009-02-07 12:45 ` Rusty Russell
2009-02-04 9:26 ` Rusty Russell [this message]
2009-02-04 8:38 ` [PATCH 2/7] x86: Add an option to compile with -ffunction-sections -fdata-sections Rusty Russell
2009-02-04 10:26 ` Anders Kaseorg
2009-02-04 10:58 ` Rusty Russell
2009-02-04 20:50 ` Anders Kaseorg
2008-12-06 8:46 ` [PATCH 1/7] Make section names compatible " Andi Kleen
2008-12-31 19:18 ` Tim Abbott
2008-12-31 19:52 ` Andi Kleen
2008-12-31 21:59 ` Tim Abbott
2009-01-01 16:32 ` Andrew Morton
2009-01-04 19:20 ` Tim Abbott
2009-01-12 21:51 ` Andrew Morton
2009-01-12 22:11 ` Andi Kleen
2009-02-04 8:15 ` Rusty Russell
2009-02-05 1:11 ` Anders Kaseorg
2009-02-05 2:00 ` Anders Kaseorg
2008-12-17 2:48 ` [PATCH 0/7] Ksplice: Rebootless kernel updates Tim Abbott
2008-12-17 3:07 ` Andrew Morton
2008-12-17 3:53 ` Dave Jones
2008-12-17 17:19 ` Jeff Arnold
2008-12-17 5:05 ` Tim Abbott
2008-12-17 12:09 ` Ben Collins
2008-12-17 12:06 ` Ben Collins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200902041956.13958.rusty@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=akpm@linux-foundation.org \
--cc=andersk@mit.edu \
--cc=jbarnold@mit.edu \
--cc=knikanth@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=tabbott@mit.edu \
--cc=vda.linux@googlemail.com \
--cc=wdaher@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.