[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20170518164909.GA939@redhat.com>
Date: Thu, 18 May 2017 18:49:10 +0200
From: Oleg Nesterov <oleg@...hat.com>
To: Miroslav Benes <mbenes@...e.cz>
Cc: jpoimboe@...hat.com, jeyu@...hat.com, jikos@...nel.org,
pmladek@...e.com, live-patching@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 2/3] livepatch: send a fake signal to all blocking tasks
I didn't see other patches in series, not sure I understand...
On 05/18, Miroslav Benes wrote:
>
> The very safe marking is done in entry.S on syscall and
> interrupt/exception exit paths, and in a stack checking functions of
> livepatch. TIF_PATCH_PENDING is cleared and the next
> recalc_sigpending() drops TIF_SIGPENDING.
Confused. The task can't return from do_signal() is signal_pending() is
true, thus it will spin forever if klp_patch_pending(current)) is true.
"forever" means until something else clears TIF_PATCH_PENDING, of course.
exit_to_usermode_loop() calls do_signal(), then klp_update_patch_state().
So it won't be cleared here.
Even if you change the order, this won't help unless I missed something,
TIF_PATCH_PENDING can be set when this task has already entered do_signal().
> Last, sending the fake signal is not automatic. It is done only when
> admin requests it by writing 1 to force sysfs attribute in livepatch
> sysfs directory.
OK, but see above, even if klp_send_fake_signal() is never called, the
a task will get this fake signal when it calls recalc_sigpending().
Oleg.
Powered by blists - more mailing lists