* [PATCH] kmod: prevent kmod_loop_msg overflow in __request_module()
@ 2011-09-29 15:50 Jiri Kosina
2011-09-29 21:31 ` Andrew Morton
0 siblings, 1 reply; 5+ messages in thread
From: Jiri Kosina @ 2011-09-29 15:50 UTC (permalink / raw)
To: Andrew Morton, Rusty Russell; +Cc: linux-kernel
Due to post-decrement in condition of kmod_loop_msg in __request_module(),
the system log can be spammed by much more than 5 instances of the 'runaway
loop' message if the number of events triggering it makes the kmod_loop_msg
to overflow.
Fix that by making sure we never increment it past the threshold.
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
---
kernel/kmod.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/kernel/kmod.c b/kernel/kmod.c
index ddc7644..a4bea97 100644
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -114,10 +114,12 @@ int __request_module(bool wait, const char *fmt, ...)
atomic_inc(&kmod_concurrent);
if (atomic_read(&kmod_concurrent) > max_modprobes) {
/* We may be blaming an innocent here, but unlikely */
- if (kmod_loop_msg++ < 5)
+ if (kmod_loop_msg < 5) {
printk(KERN_ERR
"request_module: runaway loop modprobe %s\n",
module_name);
+ kmod_loop_msg++;
+ }
atomic_dec(&kmod_concurrent);
return -ENOMEM;
}
--
1.7.3.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] kmod: prevent kmod_loop_msg overflow in __request_module()
2011-09-29 15:50 [PATCH] kmod: prevent kmod_loop_msg overflow in __request_module() Jiri Kosina
@ 2011-09-29 21:31 ` Andrew Morton
2011-09-29 22:18 ` Jiri Kosina
0 siblings, 1 reply; 5+ messages in thread
From: Andrew Morton @ 2011-09-29 21:31 UTC (permalink / raw)
To: Jiri Kosina; +Cc: Rusty Russell, linux-kernel, Andrew Morton
On Thu, 29 Sep 2011 17:50:45 +0200 (CEST)
Jiri Kosina <jkosina@suse.cz> wrote:
> Due to post-decrement
(post-increment)
> in condition of kmod_loop_msg in __request_module(),
> the system log can be spammed by much more than 5 instances of the 'runaway
> loop' message if the number of events triggering it makes the kmod_loop_msg
> to overflow.
>
> Fix that by making sure we never increment it past the threshold.
>
> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
> ---
> kernel/kmod.c | 4 +++-
> 1 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/kernel/kmod.c b/kernel/kmod.c
> index ddc7644..a4bea97 100644
> --- a/kernel/kmod.c
> +++ b/kernel/kmod.c
> @@ -114,10 +114,12 @@ int __request_module(bool wait, const char *fmt, ...)
> atomic_inc(&kmod_concurrent);
> if (atomic_read(&kmod_concurrent) > max_modprobes) {
> /* We may be blaming an innocent here, but unlikely */
> - if (kmod_loop_msg++ < 5)
> + if (kmod_loop_msg < 5) {
> printk(KERN_ERR
> "request_module: runaway loop modprobe %s\n",
> module_name);
> + kmod_loop_msg++;
> + }
> atomic_dec(&kmod_concurrent);
> return -ENOMEM;
> }
Well, it will take two billion passes through here to cause the
overflow. I really hope you found this problem by inspection!
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] kmod: prevent kmod_loop_msg overflow in __request_module()
2011-09-29 21:31 ` Andrew Morton
@ 2011-09-29 22:18 ` Jiri Kosina
2011-10-04 0:17 ` Rusty Russell
0 siblings, 1 reply; 5+ messages in thread
From: Jiri Kosina @ 2011-09-29 22:18 UTC (permalink / raw)
To: Andrew Morton; +Cc: Rusty Russell, linux-kernel, Andrew Morton
On Thu, 29 Sep 2011, Andrew Morton wrote:
> > Due to post-decrement
>
> (post-increment)
Indeed, thanks for noticing.
> > in condition of kmod_loop_msg in __request_module(),
> > the system log can be spammed by much more than 5 instances of the 'runaway
> > loop' message if the number of events triggering it makes the kmod_loop_msg
> > to overflow.
> >
> > Fix that by making sure we never increment it past the threshold.
> >
> > Signed-off-by: Jiri Kosina <jkosina@suse.cz>
> > ---
> > kernel/kmod.c | 4 +++-
> > 1 files changed, 3 insertions(+), 1 deletions(-)
> >
> > diff --git a/kernel/kmod.c b/kernel/kmod.c
> > index ddc7644..a4bea97 100644
> > --- a/kernel/kmod.c
> > +++ b/kernel/kmod.c
> > @@ -114,10 +114,12 @@ int __request_module(bool wait, const char *fmt, ...)
> > atomic_inc(&kmod_concurrent);
> > if (atomic_read(&kmod_concurrent) > max_modprobes) {
> > /* We may be blaming an innocent here, but unlikely */
> > - if (kmod_loop_msg++ < 5)
> > + if (kmod_loop_msg < 5) {
> > printk(KERN_ERR
> > "request_module: runaway loop modprobe %s\n",
> > module_name);
> > + kmod_loop_msg++;
> > + }
> > atomic_dec(&kmod_concurrent);
> > return -ENOMEM;
> > }
>
> Well, it will take two billion passes through here to cause the
> overflow. I really hope you found this problem by inspection!
Unfortunately not, it was more painful experience than code reading :)
Thanks,
--
Jiri Kosina
SUSE Labs
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] kmod: prevent kmod_loop_msg overflow in __request_module()
2011-09-29 22:18 ` Jiri Kosina
@ 2011-10-04 0:17 ` Rusty Russell
2011-10-04 9:37 ` Jiri Kosina
0 siblings, 1 reply; 5+ messages in thread
From: Rusty Russell @ 2011-10-04 0:17 UTC (permalink / raw)
To: Jiri Kosina, Andrew Morton; +Cc: linux-kernel, Andrew Morton
On Fri, 30 Sep 2011 00:18:17 +0200 (CEST), Jiri Kosina <jkosina@suse.cz> wrote:
> On Thu, 29 Sep 2011, Andrew Morton wrote:
> > Well, it will take two billion passes through here to cause the
> > overflow. I really hope you found this problem by inspection!
>
> Unfortunately not, it was more painful experience than code reading :)
Cool!
Changing it to unsigned would have helped too. But I've applied
this....
Thanks,
Rusty.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] kmod: prevent kmod_loop_msg overflow in __request_module()
2011-10-04 0:17 ` Rusty Russell
@ 2011-10-04 9:37 ` Jiri Kosina
0 siblings, 0 replies; 5+ messages in thread
From: Jiri Kosina @ 2011-10-04 9:37 UTC (permalink / raw)
To: Rusty Russell; +Cc: Andrew Morton, linux-kernel, Andrew Morton
On Tue, 4 Oct 2011, Rusty Russell wrote:
> > > Well, it will take two billion passes through here to cause the
> > > overflow. I really hope you found this problem by inspection!
> >
> > Unfortunately not, it was more painful experience than code reading :)
>
> Cool!
>
> Changing it to unsigned would have helped too.
Still woudln't have helped much in cases of __request_module() being
called incredibly quickly in an infinite loop. Changing it to unsigned
will cause the messages being printed in bunches of five, but the effect
will be the same -- the log being infinitely filled by the printk()s.
Computers can do infinite loops really quickly today :)
--
Jiri Kosina
SUSE Labs
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-10-04 9:38 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-29 15:50 [PATCH] kmod: prevent kmod_loop_msg overflow in __request_module() Jiri Kosina
2011-09-29 21:31 ` Andrew Morton
2011-09-29 22:18 ` Jiri Kosina
2011-10-04 0:17 ` Rusty Russell
2011-10-04 9:37 ` Jiri Kosina
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.