All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Lawrence <joe.lawrence@redhat.com>
To: Nicholas Mc Guire <hofrat@osadl.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Jessica Yu <jeyu@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Miroslav Benes <mbenes@suse.cz>, Petr Mladek <pmladek@suse.com>,
	live-patching@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH V4] livepatch: non static warnings fix
Date: Thu, 24 Jan 2019 12:05:57 -0500	[thread overview]
Message-ID: <8e7e6945-e06e-04e0-2cbf-42e11d906e1f@redhat.com> (raw)
In-Reply-To: <1548294496-22719-1-git-send-email-hofrat@osadl.org>

On 1/23/19 8:48 PM, Nicholas Mc Guire wrote:
> Sparse reported warnings about non-static symbols. For the variables
> a simple static attribute is fine - for the functions referenced by
> livepatch via klp_func the symbol-names must be unmodified in the
> symbol table and the patchable code has to be emitted. The resolution
> is to attach __used attribute to the shared statically declared functions.
> 
> Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org>
> Suggested-by: Joe Lawrence <joe.lawrence@redhat.com>
> Acked-by: Miroslav Benes <mbenes@suse.cz>
> Link: https://lore.kernel.org/lkml/1544965657-26804-1-git-send-email-hofrat@osadl.org/

Hi Nicholas, thanks for re-posting this fix, the __used attribute change 
was particularly interesting to learn about.

I think Miroslav requested a re-ordering of these tags, perhaps we could 
do the shuffle when we apply the patch to the tree?

   Link:
   Suggested-by:
   Signed-off-by:
   Acked-by:

With that,

Acked-by: Joe Lawrence <joe.lawrence@redhat.com>


> ---
> 
> V2: not all static functions shared need to carry the __noclone
>      attribute only those that need to be resolved at runtime by
>      livepatch - so drop the unnecessary __noclone attributes as
>      well as the Note on __noclone as suggested by Joe Lawrence
>      <joe.lawrence@redhat.com> - thanks !
> 
> V3: fix the wording as proposed by Joe Lawrence
>      <joe.lawrence@redhat.com> to address that this is not only
>      about how to fix sparse warnings but also to ensure
>      traceable/patchable code still being emitted.
> 
> V4: fix up the Link to point to the proper page as suggested
>      by Joe Lawrence <joe.lawrence@redhat.com>.

Credit to Miroslav for these last two change suggestions.

-- Joe

> Sparse reported the following findings in 5.0-rc3:
> 
>    CHECK   samples/livepatch/livepatch-shadow-mod.c
> samples/livepatch/livepatch-shadow-mod.c:99:1: warning: symbol 'dummy_list' was not declared. Should it be static?
> samples/livepatch/livepatch-shadow-mod.c:100:1: warning: symbol 'dummy_list_mutex' was not declared. Should it be static?
> samples/livepatch/livepatch-shadow-mod.c:107:23: warning: symbol 'dummy_alloc' was not declared. Should it be static?
> samples/livepatch/livepatch-shadow-mod.c:132:15: warning: symbol 'dummy_free' was not declared. Should it be static?
> samples/livepatch/livepatch-shadow-mod.c:140:15: warning: symbol 'dummy_check' was not declared. Should it be static?
> 
>    CHECK   samples/livepatch/livepatch-shadow-fix1.c
> samples/livepatch/livepatch-shadow-fix1.c:74:14: warning: symbol 'livepatch_fix1_dummy_alloc' was not declared. Should it be static?
> samples/livepatch/livepatch-shadow-fix1.c:116:6: warning: symbol 'livepatch_fix1_dummy_free' was not declared. Should it be static?
> 
>    CHECK   samples/livepatch/livepatch-shadow-fix2.c
> samples/livepatch/livepatch-shadow-fix2.c:53:6: warning: symbol 'livepatch_fix2_dummy_check' was not declared. Should it be static?
> samples/livepatch/livepatch-shadow-fix2.c:81:6: warning: symbol 'livepatch_fix2_dummy_free' was not declared. Should it be static?
> 
> Patch was compile tested with: x86_64_defconfig + FTRACE=y
> FUNCTION_TRACER=y, SAMPLES=y, LIVEPATCH=y SAMPLE_LIVEPATCH=m
> (looks sparse, smatch claan, one coccichek warning left - fix later today)
> 
> Patch was runtested with:
>     insmod samples/livepatch/livepatch-shadow-mod.ko
>     insmod samples/livepatch/livepatch-shadow-fix1.ko
>     insmod samples/livepatch/livepatch-shadow-fix2.ko
>     echo 0 > /sys/kernel/livepatch/livepatch_shadow_fix2/enabled
>     echo 0 > /sys/kernel/livepatch/livepatch_shadow_fix1/enabled
>     rmmod livepatch-shadow-fix2
>     rmmod livepatch-shadow-fix1
>     rmmod livepatch-shadow-mod
> and dmesg output compared to previous run.
> 
> Patch is against 5.0-rc3 (localversion-next is next-20190123)
> 
>   samples/livepatch/livepatch-shadow-fix1.c |  4 ++--
>   samples/livepatch/livepatch-shadow-fix2.c |  4 ++--
>   samples/livepatch/livepatch-shadow-mod.c  | 11 ++++++-----
>   3 files changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/samples/livepatch/livepatch-shadow-fix1.c b/samples/livepatch/livepatch-shadow-fix1.c
> index a5a5cac..67a73e5 100644
> --- a/samples/livepatch/livepatch-shadow-fix1.c
> +++ b/samples/livepatch/livepatch-shadow-fix1.c
> @@ -71,7 +71,7 @@ static int shadow_leak_ctor(void *obj, void *shadow_data, void *ctor_data)
>   	return 0;
>   }
>   
> -struct dummy *livepatch_fix1_dummy_alloc(void)
> +static struct dummy *livepatch_fix1_dummy_alloc(void)
>   {
>   	struct dummy *d;
>   	void *leak;
> @@ -113,7 +113,7 @@ static void livepatch_fix1_dummy_leak_dtor(void *obj, void *shadow_data)
>   			 __func__, d, *shadow_leak);
>   }
>   
> -void livepatch_fix1_dummy_free(struct dummy *d)
> +static void livepatch_fix1_dummy_free(struct dummy *d)
>   {
>   	void **shadow_leak;
>   
> diff --git a/samples/livepatch/livepatch-shadow-fix2.c b/samples/livepatch/livepatch-shadow-fix2.c
> index 52de947..91c21d5 100644
> --- a/samples/livepatch/livepatch-shadow-fix2.c
> +++ b/samples/livepatch/livepatch-shadow-fix2.c
> @@ -50,7 +50,7 @@ struct dummy {
>   	unsigned long jiffies_expire;
>   };
>   
> -bool livepatch_fix2_dummy_check(struct dummy *d, unsigned long jiffies)
> +static bool livepatch_fix2_dummy_check(struct dummy *d, unsigned long jiffies)
>   {
>   	int *shadow_count;
>   
> @@ -78,7 +78,7 @@ static void livepatch_fix2_dummy_leak_dtor(void *obj, void *shadow_data)
>   			 __func__, d, *shadow_leak);
>   }
>   
> -void livepatch_fix2_dummy_free(struct dummy *d)
> +static void livepatch_fix2_dummy_free(struct dummy *d)
>   {
>   	void **shadow_leak;
>   	int *shadow_count;
> diff --git a/samples/livepatch/livepatch-shadow-mod.c b/samples/livepatch/livepatch-shadow-mod.c
> index 4aa8a88..4d79c6dc 100644
> --- a/samples/livepatch/livepatch-shadow-mod.c
> +++ b/samples/livepatch/livepatch-shadow-mod.c
> @@ -96,15 +96,15 @@ MODULE_DESCRIPTION("Buggy module for shadow variable demo");
>    * Keep a list of all the dummies so we can clean up any residual ones
>    * on module exit
>    */
> -LIST_HEAD(dummy_list);
> -DEFINE_MUTEX(dummy_list_mutex);
> +static LIST_HEAD(dummy_list);
> +static DEFINE_MUTEX(dummy_list_mutex);
>   
>   struct dummy {
>   	struct list_head list;
>   	unsigned long jiffies_expire;
>   };
>   
> -noinline struct dummy *dummy_alloc(void)
> +static __used noinline struct dummy *dummy_alloc(void)
>   {
>   	struct dummy *d;
>   	void *leak;
> @@ -129,7 +129,7 @@ noinline struct dummy *dummy_alloc(void)
>   	return d;
>   }
>   
> -noinline void dummy_free(struct dummy *d)
> +static __used noinline void dummy_free(struct dummy *d)
>   {
>   	pr_info("%s: dummy @ %p, expired = %lx\n",
>   		__func__, d, d->jiffies_expire);
> @@ -137,7 +137,8 @@ noinline void dummy_free(struct dummy *d)
>   	kfree(d);
>   }
>   
> -noinline bool dummy_check(struct dummy *d, unsigned long jiffies)
> +static __used noinline bool dummy_check(struct dummy *d,
> +					   unsigned long jiffies)
>   {
>   	return time_after(jiffies, d->jiffies_expire);
>   }
>

  reply	other threads:[~2019-01-24 17:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-24  1:48 [PATCH V4] livepatch: non static warnings fix Nicholas Mc Guire
2019-01-24 17:05 ` Joe Lawrence [this message]
2019-01-25 15:44 ` Jiri Kosina
2019-01-27 10:08   ` Nicholas Mc Guire

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=8e7e6945-e06e-04e0-2cbf-42e11d906e1f@redhat.com \
    --to=joe.lawrence@redhat.com \
    --cc=hofrat@osadl.org \
    --cc=jeyu@kernel.org \
    --cc=jikos@kernel.org \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=live-patching@vger.kernel.org \
    --cc=mbenes@suse.cz \
    --cc=pmladek@suse.com \
    /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 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.