On Thu, Apr 12, 2018 at 11:27:01AM -0500, Josh Poimboeuf wrote:
> On Thu, Apr 12, 2018 at 07:19:47PM +0300, Mike Rapoport wrote:
> > Since commit 926e4e0c7d14b43896f9814da236b4d6408c8ff0 ("kmod: add support
> > for in-kernel livepatch hooks") livepatch-patch-hook.c unconditionally
> > creates callbacks. This causes build error for kernels older than 4.15:
> > 
> > make -C /home/rppt/git/linux M=/home/rppt/.kpatch/tmp/patch 
> > livepatch-proc-vmalloc-live.ko
> > make[1]: Entering directory '/home/rppt/git/linux'
> >   CC [M]  /home/rppt/.kpatch/tmp/patch/patch-hook.o
> > In file included from /home/rppt/.kpatch/tmp/patch/patch-hook.c:21:0:
> > /home/rppt/.kpatch/tmp/patch/livepatch-patch-hook.c:82:23: error: field 
> > ‘callbacks’ has incomplete type
> >   struct klp_callbacks callbacks;
> >                        ^
> > /home/rppt/.kpatch/tmp/patch/livepatch-patch-hook.c: In function 
> > ‘patch_init’:
> > /home/rppt/.kpatch/tmp/patch/livepatch-patch-hook.c:395:10: error: ‘struct 
> > klp_object’ has no member named ‘callbacks’
> >    lobject->callbacks = object->callbacks;
> >           ^
> > scripts/Makefile.build:302: recipe for target 
> > '/home/rppt/.kpatch/tmp/patch/patch-hook.o' failed
> > make[2]: *** [/home/rppt/.kpatch/tmp/patch/patch-hook.o] Error 1
> > Makefile:1687: recipe for target 'livepatch-proc-vmalloc-live.ko' failed
> > make[1]: *** [livepatch-proc-vmalloc-live.ko] Error 2
> > make[1]: Leaving directory '/home/rppt/git/linux'
> > Makefile:20: recipe for target 'livepatch-proc-vmalloc-live.ko' failed
> > make: *** [livepatch-proc-vmalloc-live.ko] Error 2
> > 
> > Introduce HAVE_LIVEPATCH_CALLBACKS to allow conditional compilation of the
> > callbacks addition.
> > 
> > Signed-off-by: Mike Rapoport <r...@linux.vnet.ibm.com>
> 
> Thanks!  There are a few typos in the patch: "HAS" vs "HAVE".

Huh... Will fix.

> Would you mind opening a pull request on github?

Sure.

> > ---
> >  kmod/patch/livepatch-patch-hook.c | 16 ++++++++++++++++
> >  1 file changed, 16 insertions(+)
> > 
> > diff --git a/kmod/patch/livepatch-patch-hook.c 
> > b/kmod/patch/livepatch-patch-hook.c
> > index f9e9f06..ecd00b2 100644
> > --- a/kmod/patch/livepatch-patch-hook.c
> > +++ b/kmod/patch/livepatch-patch-hook.c
> > @@ -53,6 +53,14 @@
> >  #define HAVE_IMMEDIATE
> >  #endif
> >  
> > +#ifdef RHEL_RELEASE_CODE
> > +# if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7, 5)
> > +#  define HAVE_LIVEPATCH_CALLBACKS
> > +# endif
> > +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
> > +# define HAVE_LIVEPATCH_CALLBACKS
> > +#endif
> > +
> >  /*
> >   * There are quite a few similar structures at play in this file:
> >   * - livepatch.h structs prefixed with klp_*
> > @@ -79,7 +87,9 @@ struct patch_object {
> >     struct list_head list;
> >     struct list_head funcs;
> >     struct list_head relocs;
> > +#ifdef HAS_LIVEPATCH_CALLBACKS
> >     struct klp_callbacks callbacks;
> > +#endif
> >     const char *name;
> >     int funcs_nr, relocs_nr;
> >  };
> > @@ -211,6 +221,7 @@ static void patch_free_livepatch(struct klp_patch 
> > *patch)
> >     }
> >  }
> >  
> > +#ifdef HAS_LIVEPATCH_CALLBACKS
> >  extern struct kpatch_pre_patch_callback __kpatch_callbacks_pre_patch[], 
> > __kpatch_callbacks_pre_patch_end[];
> >  extern struct kpatch_post_patch_callback __kpatch_callbacks_post_patch[], 
> > __kpatch_callbacks_post_patch_end[];
> >  extern struct kpatch_pre_unpatch_callback 
> > __kpatch_callbacks_pre_unpatch[], __kpatch_callbacks_pre_unpatch_end[];
> > @@ -286,6 +297,9 @@ static int add_callbacks_to_patch_objects(void)
> >  
> >     return 0;
> >  }
> > +#else /* HAS_LIVEPATCH_CALLBACKS */
> > +static inline int add_callbacks_to_patch_objects(void) { return 0; }
> > +#endif /* HAS_LIVEPATCH_CALLBACKS */
> >  
> >  extern struct kpatch_patch_func __kpatch_funcs[], __kpatch_funcs_end[];
> >  #ifndef HAVE_ELF_RELOCS
> > @@ -392,7 +406,9 @@ static int __init patch_init(void)
> >             }
> >  #endif /* HAVE_ELF_RELOCS */
> >  
> > +#ifdef HAVE_LIVEPATCH_CALLBACKS
> >             lobject->callbacks = object->callbacks;
> > +#endif
> >  
> >             i++;
> >     }
> > -- 
> > 2.7.4
> > 
> 
> -- 
> Josh
> 

-- 
Sincerely yours,
Mike.

_______________________________________________
kpatch mailing list
kpatch@redhat.com
https://www.redhat.com/mailman/listinfo/kpatch

Reply via email to