linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Petr Mladek <pmladek@suse.com>
To: Joe Lawrence <joe.lawrence@redhat.com>
Cc: Jiri Kosina <jikos@kernel.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Miroslav Benes <mbenes@suse.cz>, Jason Baron <jbaron@akamai.com>,
	Jessica Yu <jeyu@kernel.org>,
	Evgenii Shatokhin <eshatokhin@virtuozzo.com>,
	live-patching@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v10 00/10] livepatch: Atomic replace feature
Date: Thu, 8 Mar 2018 16:01:50 +0100	[thread overview]
Message-ID: <20180308150150.guwwj2exrymugoeq@pathway.suse.cz> (raw)
In-Reply-To: <45877626-2d41-4af8-a8ff-5897585122ad@redhat.com>

On Wed 2018-03-07 16:55:53, Joe Lawrence wrote:
> On 03/07/2018 03:20 AM, Petr Mladek wrote:
> > The atomic replace allows to create cumulative patches. They
> > are useful when you maintain many livepatches and want to remove
> > one that is lower on the stack. In addition it is very useful when
> > more patches touch the same function and there are dependencies
> > between them.
> > 
> > 
> > Changes against v9:
> > 
> >   + Fixed check of valid NOPs for already loaded objects,
> >     regression introduced in v9 [Joe, Mirek]
> >   + Allow to replace even disabled patches [Evgenii]
> > 
> > Changes against v8:
> > 
> >   + Fixed handling of statically defined struct klp_object
> >     with empty array of functions [Joe, Mirek]
> >   + Removed redundant func->new_func assignment for NOPs [Mirek]
> >   + Improved some wording [Mirek]
> >
> > [ ... snip ... ]
> 
> Hi Petr,
> 
> I tried updating the test cases I was adding in "[PATCH v0 0/3]
> additional cumulative livepatch doc/samples" and although one of the
> cases is better than before, I'm running into a new issue:  an expected
> pre-unpatch callback is not executed (its obj->patched is false).
> 
> Here's the updated test case:
> 
> Test 11
> -------
> 
> - load livepatch
> - load second livepatch (atomic replace)     <- callbacks ok
> - disable second livepatch                   <- pre-unpatch skipped
> - unload livepatch
> - unload second livepatch
> 
>   % insmod samples/livepatch/livepatch-callbacks-demo.ko
>   [ 2306.806046] livepatch: enabling patch 'livepatch_callbacks_demo'
>   [ 2306.806048] livepatch: 'livepatch_callbacks_demo': initializing patching transition
>   [ 2306.806083] livepatch_callbacks_demo: pre_patch_callback: vmlinux
>   [ 2306.806083] livepatch: 'livepatch_callbacks_demo': starting patching transition
>   [ 2307.743170] livepatch: 'livepatch_callbacks_demo': completing patching transition
>   [ 2307.743317] livepatch_callbacks_demo: post_patch_callback: vmlinux
>   [ 2307.743319] livepatch: 'livepatch_callbacks_demo': patching complet
> 
>   % insmod samples/livepatch/livepatch-callbacks-demo2.ko replace=1
>   [ 2316.161804] livepatch: enabling patch 'livepatch_callbacks_demo2'
>   [ 2316.161807] livepatch: 'livepatch_callbacks_demo2': initializing patching transition
>   [ 2316.161842] livepatch_callbacks_demo2: pre_patch_callback: vmlinux
>   [ 2316.161843] livepatch: 'livepatch_callbacks_demo2': starting patching transition
>   [ 2317.727141] livepatch: 'livepatch_callbacks_demo2': completing patching transition
>   [ 2317.727254] livepatch_callbacks_demo2: post_patch_callback: vmlinux
>   [ 2317.727255] livepatch: 'livepatch_callbacks_demo2': patching complete
> 
>   % echo 0 > /sys/kernel/livepatch/livepatch_callbacks_demo2/enabled
>   [ 2328.995854] livepatch: 'livepatch_callbacks_demo2': initializing unpatching transition
>   [ 2328.995898] livepatch: 'livepatch_callbacks_demo2': starting unpatching transition
>   [ 2330.719234] livepatch: 'livepatch_callbacks_demo2': completing unpatching transition
>   [ 2330.719597] livepatch_callbacks_demo2: post_unpatch_callback: vmlinux
>   [ 2330.719599] livepatch: 'livepatch_callbacks_demo2': unpatching complete
> 
>   % rmmod samples/livepatch/livepatch-callbacks-demo2.ko
>   % rmmod samples/livepatch/livepatch-callbacks-demo.ko
> 
> Running against v10, callbacks seem to be good up until I disable an
> atomic replace patch.  My understanding is that the original patch's
> unpatch callbacks should be skipped (as they were).  I was surprised to
> see that atomic replacement patch only ran it's post-unpatch callback.

Great catch!

I guess that it is caused by the heuristic used in
klp_unpatch_object() to decide whether the object is patched
or not.

We need to change the state only when manipulating the
statically defined functions.

Thanks a lot for so extensive testing!!!

Best Regards,
Petr

  reply	other threads:[~2018-03-08 15:01 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-07  8:20 [PATCH v10 00/10] livepatch: Atomic replace feature Petr Mladek
2018-03-07  8:20 ` [PATCH v10 01/10] livepatch: Use lists to manage patches, objects and functions Petr Mladek
2018-03-13 22:38   ` Josh Poimboeuf
2018-03-07  8:20 ` [PATCH v10 02/10] livepatch: Free only structures with initialized kobject Petr Mladek
2018-03-13 22:38   ` Josh Poimboeuf
2018-03-14 15:50     ` Petr Mladek
2018-03-07  8:20 ` [PATCH v10 03/10] livepatch: Initial support for dynamic structures Petr Mladek
2018-03-13 22:44   ` Josh Poimboeuf
2018-03-19 13:10     ` Petr Mladek
2018-03-07  8:20 ` [PATCH v10 04/10] livepatch: Allow to unpatch only functions of the given type Petr Mladek
2018-03-07  8:20 ` [PATCH v10 05/10] livepatch: Support separate list for replaced patches Petr Mladek
2018-03-13 22:46   ` Josh Poimboeuf
2018-03-19 15:02     ` Petr Mladek
2018-03-19 21:43       ` Josh Poimboeuf
2018-03-20 12:25         ` Petr Mladek
2018-03-20 12:48           ` Evgenii Shatokhin
2018-03-20 13:30           ` Miroslav Benes
2018-03-20 20:15           ` Josh Poimboeuf
2018-03-23  9:45             ` Petr Mladek
2018-03-23 22:44               ` Josh Poimboeuf
2018-03-26 10:11                 ` Petr Mladek
2018-04-06 19:50                   ` Josh Poimboeuf
2018-04-10  8:34                     ` Petr Mladek
2018-04-10 13:21                       ` Miroslav Benes
2018-04-10 13:56                         ` Evgenii Shatokhin
2018-04-10 17:47                           ` Josh Poimboeuf
2018-04-11  7:56                             ` Miroslav Benes
2018-04-10 17:42                       ` Josh Poimboeuf
2018-04-11  8:07                         ` Miroslav Benes
2018-04-11 12:32                           ` Josh Poimboeuf
2018-04-11 13:39                             ` Miroslav Benes
2018-04-11 14:17                             ` Petr Mladek
2018-04-11 15:48                               ` Josh Poimboeuf
2018-04-16 14:58                                 ` Petr Mladek
2018-04-16 19:04                                   ` Josh Poimboeuf
2018-04-17  8:23                                     ` Miroslav Benes
2018-04-17 15:37                                     ` Petr Mladek
2018-04-17 17:57                                       ` Josh Poimboeuf
2018-03-07  8:20 ` [PATCH v10 06/10] livepatch: Add atomic replace Petr Mladek
2018-03-13 22:48   ` Josh Poimboeuf
2018-03-20 14:35     ` Petr Mladek
2018-03-20 21:26       ` Josh Poimboeuf
2018-03-22 15:43         ` Petr Mladek
2018-03-07  8:20 ` [PATCH v10 07/10] livepatch: Correctly handle atomic replace for not yet loaded modules Petr Mladek
2018-03-13 14:55   ` Petr Mladek
2018-03-07  8:20 ` [PATCH v10 08/10] livepatch: Improve dynamic struct klp_object detection and manipulation Petr Mladek
2018-03-07  8:20 ` [PATCH v10 09/10] livepatch: Allow to replace even disabled patches Petr Mladek
2018-03-07  8:20 ` [PATCH v10 10/10] livepatch: Atomic replace and cumulative patches documentation Petr Mladek
2018-03-07 21:55 ` [PATCH v10 00/10] livepatch: Atomic replace feature Joe Lawrence
2018-03-08 15:01   ` Petr Mladek [this message]
2018-03-08 15:09     ` Joe Lawrence
2018-03-12 18:57       ` Joe Lawrence
2018-03-20 13:16         ` Miroslav Benes
2018-03-26 10:56         ` Petr Mladek
2018-03-26 18:12           ` Joe Lawrence
2018-03-27  8:22             ` Petr Mladek
2018-08-17 10:17 ` Evgenii Shatokhin
2018-08-17 14:53   ` Petr Mladek
2018-08-17 15:33     ` Evgenii Shatokhin

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=20180308150150.guwwj2exrymugoeq@pathway.suse.cz \
    --to=pmladek@suse.com \
    --cc=eshatokhin@virtuozzo.com \
    --cc=jbaron@akamai.com \
    --cc=jeyu@kernel.org \
    --cc=jikos@kernel.org \
    --cc=joe.lawrence@redhat.com \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=live-patching@vger.kernel.org \
    --cc=mbenes@suse.cz \
    /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;
as well as URLs for NNTP newsgroup(s).