livepatch: samples: non static warnings fix
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. Link: https://lore.kernel.org/lkml/1544965657-26804-1-git-send-email-hofrat@osadl.org/ Suggested-by: Joe Lawrence <joe.lawrence@redhat.com> Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> Acked-by: Miroslav Benes <mbenes@suse.cz> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
a6c34247af
commit
b73d5dc722
@ -71,7 +71,7 @@ static int shadow_leak_ctor(void *obj, void *shadow_data, void *ctor_data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dummy *livepatch_fix1_dummy_alloc(void)
|
static struct dummy *livepatch_fix1_dummy_alloc(void)
|
||||||
{
|
{
|
||||||
struct dummy *d;
|
struct dummy *d;
|
||||||
void *leak;
|
void *leak;
|
||||||
@ -113,7 +113,7 @@ static void livepatch_fix1_dummy_leak_dtor(void *obj, void *shadow_data)
|
|||||||
__func__, d, *shadow_leak);
|
__func__, d, *shadow_leak);
|
||||||
}
|
}
|
||||||
|
|
||||||
void livepatch_fix1_dummy_free(struct dummy *d)
|
static void livepatch_fix1_dummy_free(struct dummy *d)
|
||||||
{
|
{
|
||||||
void **shadow_leak;
|
void **shadow_leak;
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ struct dummy {
|
|||||||
unsigned long jiffies_expire;
|
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;
|
int *shadow_count;
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ static void livepatch_fix2_dummy_leak_dtor(void *obj, void *shadow_data)
|
|||||||
__func__, d, *shadow_leak);
|
__func__, d, *shadow_leak);
|
||||||
}
|
}
|
||||||
|
|
||||||
void livepatch_fix2_dummy_free(struct dummy *d)
|
static void livepatch_fix2_dummy_free(struct dummy *d)
|
||||||
{
|
{
|
||||||
void **shadow_leak;
|
void **shadow_leak;
|
||||||
int *shadow_count;
|
int *shadow_count;
|
||||||
|
@ -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
|
* Keep a list of all the dummies so we can clean up any residual ones
|
||||||
* on module exit
|
* on module exit
|
||||||
*/
|
*/
|
||||||
LIST_HEAD(dummy_list);
|
static LIST_HEAD(dummy_list);
|
||||||
DEFINE_MUTEX(dummy_list_mutex);
|
static DEFINE_MUTEX(dummy_list_mutex);
|
||||||
|
|
||||||
struct dummy {
|
struct dummy {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
unsigned long jiffies_expire;
|
unsigned long jiffies_expire;
|
||||||
};
|
};
|
||||||
|
|
||||||
noinline struct dummy *dummy_alloc(void)
|
static __used noinline struct dummy *dummy_alloc(void)
|
||||||
{
|
{
|
||||||
struct dummy *d;
|
struct dummy *d;
|
||||||
void *leak;
|
void *leak;
|
||||||
@ -129,7 +129,7 @@ noinline struct dummy *dummy_alloc(void)
|
|||||||
return d;
|
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",
|
pr_info("%s: dummy @ %p, expired = %lx\n",
|
||||||
__func__, d, d->jiffies_expire);
|
__func__, d, d->jiffies_expire);
|
||||||
@ -137,7 +137,8 @@ noinline void dummy_free(struct dummy *d)
|
|||||||
kfree(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);
|
return time_after(jiffies, d->jiffies_expire);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user