mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [RFC] [PATCH] make add_taint() inline
       [not found] <20050911103757.7cc1f50f.rdunlap@xenotime.net>
@ 2005-09-11 17:44 ` donate
  2005-09-11 18:22   ` Kyle Moffett
  2005-09-11 19:44   ` Andrew Morton
  0 siblings, 2 replies; 6+ messages in thread
From: donate @ 2005-09-11 17:44 UTC (permalink / raw)
  To: lkml; +Cc: akpm

From: Randy Dunlap <rdunlap@xenotime.net>

add_taint() is a trivial function.
No need to call it out-of-line, just make it inline and
remove its export.

Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
---

 arch/x86_64/kernel/mce_intel.c |    1 +
 include/linux/kernel.h         |    5 ++++-
 kernel/panic.c                 |    6 ------
 3 files changed, 5 insertions(+), 7 deletions(-)

diff -Naurp linux-2613-git10/arch/x86_64/kernel/mce_intel.c~add_taint_inline linux-2613-git10/arch/x86_64/kernel/mce_intel.c
--- linux-2613-git10/arch/x86_64/kernel/mce_intel.c~add_taint_inline	2005-09-10 21:58:37.000000000 -0700
+++ linux-2613-git10/arch/x86_64/kernel/mce_intel.c	2005-09-10 21:58:55.000000000 -0700
@@ -5,6 +5,7 @@
 
 #include <linux/init.h>
 #include <linux/interrupt.h>
+#include <linux/kernel.h>
 #include <linux/percpu.h>
 #include <asm/processor.h>
 #include <asm/msr.h>
diff -Naurp linux-2613-git10/include/linux/kernel.h~add_taint_inline linux-2613-git10/include/linux/kernel.h
--- linux-2613-git10/include/linux/kernel.h~add_taint_inline	2005-08-28 16:41:01.000000000 -0700
+++ linux-2613-git10/include/linux/kernel.h	2005-09-10 21:54:13.000000000 -0700
@@ -172,7 +172,10 @@ extern int panic_timeout;
 extern int panic_on_oops;
 extern int tainted;
 extern const char *print_tainted(void);
-extern void add_taint(unsigned);
+static inline void add_taint(unsigned flag)
+{
+	tainted |= flag;
+}
 
 /* Values used for system_state */
 extern enum system_states {
diff -Naurp linux-2613-git10/kernel/panic.c~add_taint_inline linux-2613-git10/kernel/panic.c
--- linux-2613-git10/kernel/panic.c~add_taint_inline	2005-08-28 16:41:01.000000000 -0700
+++ linux-2613-git10/kernel/panic.c	2005-09-10 21:55:04.000000000 -0700
@@ -167,9 +167,3 @@ const char *print_tainted(void)
 		snprintf(buf, sizeof(buf), "Not tainted");
 	return(buf);
 }
-
-void add_taint(unsigned flag)
-{
-	tainted |= flag;
-}
-EXPORT_SYMBOL(add_taint);

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

* Re: [RFC] [PATCH] make add_taint() inline
  2005-09-11 17:44 ` [RFC] [PATCH] make add_taint() inline donate
@ 2005-09-11 18:22   ` Kyle Moffett
  2005-09-11 22:56     ` Randy.Dunlap
  2005-09-11 19:44   ` Andrew Morton
  1 sibling, 1 reply; 6+ messages in thread
From: Kyle Moffett @ 2005-09-11 18:22 UTC (permalink / raw)
  To: Randy.Dunlap; +Cc: LKML Kernel, akpm

On Sep 11, 2005, at 13:44:37, donate wrote:
> From: Randy Dunlap <rdunlap@xenotime.net>
>
> add_taint() is a trivial function.
> No need to call it out-of-line, just make it inline and
> remove its export.

Actually, in this case it might be better to leave add_taint
exported, add and export a new function get_taint(), and then
remove all export of the variable "tainted".  I've actually
seen one case where some module removed taint bits.  I don't
remember where or why, but it seemed really bad at the time,
and still does.  Also, does the tainted variable need any
kind of locking?  What happens if two CPUs try to taint the
kernel simultaneously?

Cheers,
Kyle Moffett

--
Premature optimization is the root of all evil in programming
   -- C.A.R. Hoare




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

* Re: [RFC] [PATCH] make add_taint() inline
  2005-09-11 17:44 ` [RFC] [PATCH] make add_taint() inline donate
  2005-09-11 18:22   ` Kyle Moffett
@ 2005-09-11 19:44   ` Andrew Morton
  2005-09-11 22:52     ` Randy.Dunlap
  1 sibling, 1 reply; 6+ messages in thread
From: Andrew Morton @ 2005-09-11 19:44 UTC (permalink / raw)
  To: donate; +Cc: linux-kernel

donate <donate@madrone.org> wrote:
>
> From: donate <donate@madrone.org>

Who is this?

> From: Randy Dunlap <rdunlap@xenotime.net>

>  add_taint() is a trivial function.
>  No need to call it out-of-line, just make it inline and
>  remove its export.

Well, presumably add_taint() was exported to modules for a reason.  If that
reason was valid then this patch requires that `tainted' be exported to
modules too.  And that allows naughty modules to trivially zero it out.


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

* Re: [RFC] [PATCH] make add_taint() inline
  2005-09-11 19:44   ` Andrew Morton
@ 2005-09-11 22:52     ` Randy.Dunlap
  0 siblings, 0 replies; 6+ messages in thread
From: Randy.Dunlap @ 2005-09-11 22:52 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel

On Sun, 11 Sep 2005 12:44:34 -0700 Andrew Morton wrote:

> donate <donate@madrone.org> wrote:
> >
> > From: donate <donate@madrone.org>
> 
> Who is this?

Just some little mistake that I have since corrected.
Sorry about that.

> > From: Randy Dunlap <rdunlap@xenotime.net>
> 
> >  add_taint() is a trivial function.
> >  No need to call it out-of-line, just make it inline and
> >  remove its export.
> 
> Well, presumably add_taint() was exported to modules for a reason.  If that
> reason was valid then this patch requires that `tainted' be exported to
> modules too.  And that allows naughty modules to trivially zero it out.

Got it, thanks.  That's why it said [RFC].

---
~Randy

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

* Re: [RFC] [PATCH] make add_taint() inline
  2005-09-11 18:22   ` Kyle Moffett
@ 2005-09-11 22:56     ` Randy.Dunlap
  2005-09-11 23:10       ` Kyle Moffett
  0 siblings, 1 reply; 6+ messages in thread
From: Randy.Dunlap @ 2005-09-11 22:56 UTC (permalink / raw)
  To: Kyle Moffett; +Cc: linux-kernel, akpm

On Sun, 11 Sep 2005 14:22:08 -0400 Kyle Moffett wrote:

> On Sep 11, 2005, at 13:44:37, donate wrote:
> > From: Randy Dunlap <rdunlap@xenotime.net>
> >
> > add_taint() is a trivial function.
> > No need to call it out-of-line, just make it inline and
> > remove its export.
> 
> Actually, in this case it might be better to leave add_taint
> exported, add and export a new function get_taint(), and then
> remove all export of the variable "tainted".  I've actually
> seen one case where some module removed taint bits.  I don't

some in-tree module?

> remember where or why, but it seemed really bad at the time,
> and still does.  Also, does the tainted variable need any
> kind of locking?  What happens if two CPUs try to taint the
> kernel simultaneously?

Good question.  one wins?

It sure looks like a problem in theory.  I don't know that
we have ever seen a bug report related to it though.

Maybe Dave Jones's modprobe/insmod killer test on a big
multiprocessor system could do that one day.

---
~Randy

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

* Re: [RFC] [PATCH] make add_taint() inline
  2005-09-11 22:56     ` Randy.Dunlap
@ 2005-09-11 23:10       ` Kyle Moffett
  0 siblings, 0 replies; 6+ messages in thread
From: Kyle Moffett @ 2005-09-11 23:10 UTC (permalink / raw)
  To: Randy.Dunlap; +Cc: linux-kernel, akpm

On Sep 11, 2005, at 18:56:37, Randy.Dunlap wrote:
> On Sun, 11 Sep 2005 14:22:08 -0400 Kyle Moffett wrote:
>
>> On Sep 11, 2005, at 13:44:37, donate wrote:
>>
>>> From: Randy Dunlap <rdunlap@xenotime.net>
>>>
>>> add_taint() is a trivial function.
>>> No need to call it out-of-line, just make it inline and
>>> remove its export.
>>
>> Actually, in this case it might be better to leave add_taint
>> exported, add and export a new function get_taint(), and then
>> remove all export of the variable "tainted".  I've actually
>> seen one case where some module removed taint bits.  I don't
>
> some in-tree module?

No, it was a BSD out-of-tree module, I don't even remember what
it was anymore, it's probably not significant, but if "tainted"
is exported, it seems like some binary module writers might get
the brilliant idea to twiddle it by hand.  How about something
like this to enforce the idea that taintedness is add-only:

void add_taint(unsigned int flags);
unsigned int get_taint(void);

static unsigned int tainted;

Then use atomic bit operations on platforms which have them and
a spinlock on those that don't.  My guess where the lack of
locking might cause issues is if we hit an MCE and bad_page at
the same time on SMP or something.  It seems like it would be
really rare in practice, but I guess that appropriately timed
badness in multiple drivers (perhaps one triggered by the other?)
could cause it to occur.

> Maybe Dave Jones's modprobe/insmod killer test on a big
> multiprocessor system could do that one day.

Or that :-D.  The only way I can see this dying or accidentally
untainting is if two processors try to add different types of
taint simultaneously.

Cheers,
Kyle Moffett

--
Somone asked me why I work on this free (http://www.fsf.org/philosophy/)
software stuff and not get a real job. Charles Shultz had the best  
answer:

"Why do musicians compose symphonies and poets write poems? They do  
it because
life wouldn't have any meaning for them if they didn't. That's why I  
draw
cartoons. It's my life."
   -- Charles Shultz



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

end of thread, other threads:[~2005-09-11 23:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20050911103757.7cc1f50f.rdunlap@xenotime.net>
2005-09-11 17:44 ` [RFC] [PATCH] make add_taint() inline donate
2005-09-11 18:22   ` Kyle Moffett
2005-09-11 22:56     ` Randy.Dunlap
2005-09-11 23:10       ` Kyle Moffett
2005-09-11 19:44   ` Andrew Morton
2005-09-11 22:52     ` Randy.Dunlap

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

all inboxes | Powered by JetHome®