public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Dmitry ADAMUSHKA (EXT)" <dmitry.adamushka_ext@softathome.com>
To: Oleg Nesterov <oleg@redhat.com>, Ingo Molnar <mingo@elte.hu>,
	"H. Peter Anvin" <hpa@zytor.com>
Cc: linux-kernel@vger.kernel.org,
	Dmitry Adamushko <dmitry.adamushko@gmail.com>,
	Ralf Baechle <ralf@linux-mips.org>
Subject: Re: 'khelper' (child) is stuck in endless loop: do_signal() and !user_mode(regs)
Date: Mon, 12 Mar 2012 17:35:38 +0100 (CET)	[thread overview]
Message-ID: <1486047996.69314.1331570138102.JavaMail.root@storentr1.softathome.com> (raw)
In-Reply-To: <522171377.62242.1331225909662.JavaMail.root@storentr1.softathome.com>


just wondering, whether this problem/scenario considered to be completely unrealistic or I just should resend the x86 patch alone to get more attention? :-)

--Dmitry

----- Original Message -----
> From: "Dmitry ADAMUSHKA (EXT)" <dmitry.adamushka_ext@softathome.com>
> To: "Oleg Nesterov" <oleg@redhat.com>
> Cc: "Ingo Molnar" <mingo@elte.hu>, "Ralf Baechle" <ralf@linux-mips.org>, "wouter cloetens"
> <wouter.cloetens@softathome.com>, linux-kernel@vger.kernel.org, "Dmitry Adamushko" <dmitry.adamushko@gmail.com>, "H.
> Peter Anvin" <hpa@zytor.com>
> Sent: Thursday, March 8, 2012 5:58:29 PM
> Subject: Re: 'khelper' (child) is stuck in endless loop: do_signal() and !user_mode(regs)

> > On 03/08, Dmitry ADAMUSHKA (EXT) wrote:
> > >
> > > The following quick hack "fixes" it for x86.
> >
> > First of all let me repeat, I do not understand this asm ;)
> > Fortunately Ingo and Peter do.
> >
> > But,
> >
> > > --- arch/x86/kernel/entry_32.S.orig 2012-03-08 15:42:25.041296595
> > > +0100 +++ arch/x86/kernel/entry_32.S 2012-03-08 15:58:29.926081131
> > > +0100 @@ -98,12 +98,6 @@
> > >  #endif .endm
> > >
> > > -#ifdef CONFIG_VM86
> > > -#define resume_userspace_sig check_userspace
> > > -#else -#define resume_userspace_sig resume_userspace
> > > -#endif -
> > >  /*
> > >   * User gs save/restore
> > >   *
> > > @@ -327,10 +321,19 @@ ret_from_exception:
> > >         preempt_stop(CLBR_ANY)
> > >  ret_from_intr:
> > >         GET_THREAD_INFO(%ebp)
> > > -check_userspace: +resume_userspace_sig: +#ifdef CONFIG_VM86
> > >         movl PT_EFLAGS(%esp), %eax # mix EFLAGS and CS
> > >         movb PT_CS(%esp), %al
> > >         andl $(X86_EFLAGS_VM | SEGMENT_RPL_MASK), %eax
> > > +#else +/*
> > > + * We can be coming here from a syscall done in the kernel space,
> > > + * e.g. a failed kernel_execve().
> > > + */
> > > + movl PT_CS(%esp), %eax
> > > + andl $SEGMENT_RPL_MASK, %eax
> > > +#endif
> > >         cmpl $USER_RPL, %eax
> > >         jb resume_kernel # not returning to v8086 or userspace
> >
> > IIUC (I can be easily wrong) this breaks the endless loop, but
> > only after do_notify_resume() was already called.
> 
> yeah, basically I'm simulating the approach of CONFIG_VM86 here, i.e.
> doing the check at the same place in the call chain. Well, and giving
> a possibility for that "if (!user_mode(regs))" code in do_signal() to
> execute :-))
> 
> btw., what are the legitimate cases/code-paths for this part of
> do_signal()? I see that other archs just copy-past this approach. My
> initial thought was that it has something to do with handling (or
> rather preserving) some sort of signals that get delivered to
> not-yet-fully-created user-space tasks.. so that they get handled when
> these new tasks are up-and-running.
> 
> >
> > _perhaps_ it would be better to avoid do_notify_resume() in this
> > case altogether. Say, fire_user_return_notifiers() doesn't look
> > right in this case, we are not going to return to the usermode.
> >
> 
> yeah, there are some other corner cases I'm not sure about (like with
> syscall tracing). Also, there can be other scenarios of entering this
> loop... so one way or another, the loop should be broken.
> 
> --Dmitry
This message and any attachments herein are confidential, intended solely for the addressees and are SoftAtHome's ownership. Any unauthorized use or dissemination is prohibited. If you are not the intended addressee of this message, please cancel it immediately and inform the sender.

  reply	other threads:[~2012-03-12 16:35 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAO6Zf6C+SDZ-TV12wr9oiO6HB-itQ6fLPHFugXk0osEiAxW22w@mail.gmail.com>
2012-03-08 15:12 ` 'khelper' (child) is stuck in endless loop: do_signal() and !user_mode(regs) Dmitry ADAMUSHKA (EXT)
2012-03-08 15:55   ` Dmitry ADAMUSHKA (EXT)
2012-03-08 16:08     ` Oleg Nesterov
2012-03-08 16:29   ` Oleg Nesterov
2012-03-08 16:58     ` Dmitry ADAMUSHKA (EXT)
2012-03-12 16:35       ` Dmitry ADAMUSHKA (EXT) [this message]
2012-03-12 18:00         ` Oleg Nesterov
     [not found] <139779962.60750.1331202718116.JavaMail.root@storentr1.softathome.com>
2012-03-08 10:37 ` Dmitry ADAMUSHKA (EXT)
2012-03-08 15:46   ` Oleg Nesterov
     [not found] <1144797072.59663.1331142646789.JavaMail.root@storentr1.softathome.com>
2012-03-07 17:51 ` Dmitry ADAMUSHKA (EXT)
2012-03-07 18:46   ` Oleg Nesterov
2012-03-07 20:05     ` Dmitry Adamushko

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=1486047996.69314.1331570138102.JavaMail.root@storentr1.softathome.com \
    --to=dmitry.adamushka_ext@softathome.com \
    --cc=dmitry.adamushko@gmail.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=oleg@redhat.com \
    --cc=ralf@linux-mips.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox