From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752278AbbKPMLH (ORCPT ); Mon, 16 Nov 2015 07:11:07 -0500 Received: from mx2.suse.de ([195.135.220.15]:56995 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751800AbbKPMLD (ORCPT ); Mon, 16 Nov 2015 07:11:03 -0500 Date: Mon, 16 Nov 2015 13:11:00 +0100 From: Petr Mladek To: Josh Poimboeuf Cc: Chris J Arges , live-patching@vger.kernel.org, jeyu@redhat.com, Seth Jennings , Jiri Kosina , Vojtech Pavlik , linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/3 v4] livepatch: add old_sympos as disambiguator field to klp_reloc Message-ID: <20151116121100.GZ2599@pathway.suse.cz> References: <20151103200608.GQ27488@treble.redhat.com> <1447259366-7055-1-git-send-email-chris.j.arges@canonical.com> <1447259366-7055-3-git-send-email-chris.j.arges@canonical.com> <20151111175731.GF5331@treble.redhat.com> <20151112143157.GS2599@pathway.suse.cz> <20151112191917.GJ4038@treble.hsd1.ky.comcast.net> <20151113135442.GU2599@pathway.suse.cz> <20151113165934.GA22014@treble.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151113165934.GA22014@treble.redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri 2015-11-13 10:59:34, Josh Poimboeuf wrote: > On Fri, Nov 13, 2015 at 02:54:42PM +0100, Petr Mladek wrote: > > On Thu 2015-11-12 13:19:17, Josh Poimboeuf wrote: > > > On Thu, Nov 12, 2015 at 03:31:58PM +0100, Petr Mladek wrote: > > > > On Wed 2015-11-11 11:57:31, Josh Poimboeuf wrote: > > > > > On Wed, Nov 11, 2015 at 10:29:00AM -0600, Chris J Arges wrote: > > > > > > diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c > > > > > > index 26f9778..4eb8691 100644 > > > > > > --- a/kernel/livepatch/core.c > > > > > > +++ b/kernel/livepatch/core.c > > > > > > @@ -261,7 +222,7 @@ static int klp_find_verify_func_addr(struct klp_object *obj, > > > > > > * object is either vmlinux or the kmod being patched). > > > > > > */ > > > > > > static int klp_find_external_symbol(struct module *pmod, const char *name, > > > > > > - unsigned long *addr) > > > > > > + unsigned long *addr, unsigned long sympos) > > > > > > { > > > > > > const struct kernel_symbol *sym; > > > > > > > > > > > > > > There are two cases for external symbols: > > > > > > 1. Accessing a global symbol in another .o file in the patch module. > > > For an example of a patch which does this, see: > > > > > > https://github.com/dynup/kpatch/blob/master/test/integration/f22/module-call-external.patch > > > > > > In that example, notice that kpatch_string() function is global (not > > > static), and is not exported. It *is* actually a real world > > > scenario. > > > > Mirek helped me to understand it. The symbol is exported if you > > compile the above patch from sources. kpatch produces the patch by > > pecking out the newly created symbols without looking if they > > are newly exported. I hope that we got it right. > > Hm, I don't really follow what you're saying. Are we using different > definitions of 'exported'? Yeah, I messed the meaning of the various terms. Also I did not have a good picture about the difference in handling global symbols in normal userspace binaries and kernel. > By exported, I mean the use of the EXPORT_SYMBOL macro which makes the > symbol available for use by other modules. The above patch doesn't use > the EXPORT_SYMBOL macro, so the kpatch_string symbol isn't exported, and > can't be used by other kernel modules. > > However, the symbol *is* global and can be used by other .o files within > the patch module. Thanks you and Mirek for explanation. I hope that I will send less confusing mails from now on. Best Regards, Petr