Re: 2.5.31: modules don't work at all

Andrew Rodland
2002-08-13T00:06:07Z

On Sun, 11 Aug 2002 22:36:50 -0700
Andrew Morton <akpm@zip.com.au> wrote:
> Skip Ford wrote:
> > If I back out this change to arch/i386/mm/fault.c then modules
> > successfully load. I have no idea if backing it out causes other
> > problems though.
> >
> > diff -Nru a/arch/i386/mm/fault.c b/arch/i386/mm/fault.c
> > --- a/arch/i386/mm/fault.c Sat Aug 10 18:42:20 2002
> > +++ b/arch/i386/mm/fault.c Sat Aug 10 18:42:20 2002
> > @@ -181,10 +181,10 @@
> > info.si_code = SEGV_MAPERR;
> >
> > /*
> > - * If we're in an interrupt or have no user
> > - * context, we must not take the fault..
> > + * If we're in an interrupt, have no user context or are
> > running in an
> > + * atomic region then we must not take the
> > fault..
> > */
> > - if (in_interrupt() || !mm)
> > + if (preempt_count() || !mm)
> > goto no_context;
> >
> > down_read(&mm->mmap_sem);
> >
>
> Yes, that's the problem. qm_symbols() is performing copy_to_user()
> inside lock_kernel() and that's an "atomic copy_to_user()" in 2.5.31.
> But only if preempt is selected. The copy_to_user() doesn't work.
>
> There's nothing illegal about copy_to_user() inside lock_kernel().

Does that mean that the above fix is a legal quick-fix and won't cause
things to fall apart, or does it mean that I shouldn't bother until the
next version?