Received: by 2002:a25:5b86:0:0:0:0:0 with SMTP id p128csp841481ybb; Thu, 28 Mar 2019 13:18:05 -0700 (PDT) X-Google-Smtp-Source: APXvYqxeBP88jH7Zn+qGzhJfEGzt8sheiOn9iIzHTvg1yQjCXQQR0LJ8FteDW/TI/dbpmkZnFNtE X-Received: by 2002:a65:624a:: with SMTP id q10mr14915677pgv.435.1553804285056; Thu, 28 Mar 2019 13:18:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553804285; cv=none; d=google.com; s=arc-20160816; b=qi+JWZYyvGn7bxpQhAJvrbeW0hqrqYGlE7t0t5i/9kO0DV1QlaVJdjteDgIIUBrFpO QNknP654j+3Rplk/mjJrFr/pwe1HLTsbESDos2yHnNQEsSXGGlQfEaRZfzKtx4tIMKuJ A3NxbyBLVP0AnzU87Zb0I8iJ2YUpvihsRjhRa0ro6u6poeA2/zpkAjLw9DTtyYOs9Icw +L4iF7tOUTHLDC+kKdtjYIZ0stHElcjKaga0oDhZwVYt4znjSvmoND1qt1n3bb21Mnwh 15yr5/rO657MLmj4m8Zn2hf7Ws+HiALoTLukbi+ActAmGNeo9AVty1ORfVmdnA0uFgmw QQug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=pFcPN6QVqJz1tYAaBh+8R7gnbJllye4JP9VFOUAlUlg=; b=AYoEwwOhBaGmeU9ZUSS6YmpG+O7lcispcU57JrfOXPnZQuOUqJUtIwZ7TsncFAXgmP Fy/vPivKDXO79puXhcImlOmtT5uoREkdIv4gWX6B/vEg/RFCpE7jBgrPHjMv0X/H+4QV tUwHOs0Nb7ZX6l4A4RYFU772Bz4gMSVpNQ6hRJ1UgRHhWwGLo4qsdBK23NnwMV6U3wp8 j05Q11vXDBJj3pafS9usMv/VzXNcPw6o79nw78kZEWzR7/pQs4wU7uLjfEWba/9jRw5z r6Ijg7ZsQcabb8VJWWevoIpNE1D2K844bFt/kpN1KzrWGsQ0nbZtZ7f5KNXN3GKYKH36 vmsQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j16si21208274pfa.197.2019.03.28.13.17.48; Thu, 28 Mar 2019 13:18:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726321AbfC1URJ (ORCPT + 99 others); Thu, 28 Mar 2019 16:17:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56122 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726165AbfC1URI (ORCPT ); Thu, 28 Mar 2019 16:17:08 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 67FD230084C9; Thu, 28 Mar 2019 20:17:07 +0000 (UTC) Received: from redhat.com (dhcp-17-208.bos.redhat.com [10.18.17.208]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 85C2B5C29A; Thu, 28 Mar 2019 20:17:05 +0000 (UTC) Date: Thu, 28 Mar 2019 16:17:03 -0400 From: Joe Lawrence To: Joao Moreira , Miroslav Benes Cc: live-patching@vger.kernel.org, pmladek@suse.cz, jikos@suse.cz, nstange@suse.de, jpoimboe@redhat.com, khlebnikov@yandex-team.ru, jeyu@kernel.org, matz@suse.de, linux-kernel@vger.kernel.org, yamada.masahiro@socionext.com, linux-kbuild@vger.kernel.org, michal.lkml@markovi.net Subject: Re: [PATCH v2 2/8] kbuild: Support for Symbols.list creation Message-ID: <20190328201703.GA8658@redhat.com> References: <20190301141313.15057-1-jmoreira@suse.de> <20190301141313.15057-3-jmoreira@suse.de> <20190318191926.GA23138@redhat.com> <5f615af5-ced7-2361-5b71-71fece8b43c5@suse.de> <699e78da-36ba-8217-c509-2e9b443bd380@suse.de> <1b6ee81b-5699-a1cc-9a85-02df0eeaed12@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1b6ee81b-5699-a1cc-9a85-02df0eeaed12@redhat.com> User-Agent: Mutt/1.11.3 (2019-02-01) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Thu, 28 Mar 2019 20:17:07 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 26, 2019 at 04:53:12PM -0400, Joe Lawrence wrote: > On 3/26/19 2:13 PM, Joao Moreira wrote: > > > > > > On 3/26/19 1:15 PM, Joe Lawrence wrote: > >> > > > Hi Joao, > > > > > > This change seems to work okay for (again) single object modules, but > > > I'm having issues with multi-object modules. > > > > > > > Hi Joe, thanks for the sources, this made everything much easier in my > > side :) > > > > In the patch below I change a little bit the interface used to inform > > kbuild that a module is a livepatch. Instead of defining the flag > > LIVEPATCH_ per .o file, we define it per module (what actually makes > > much more sense). We later use $(basetarget) in the Makefile for > > checking the flags. By doing so, and invoking cmd_livepatch both from > > the $(single-used-m) and $(multi-used-m) we ensure that the .livepatch > > file is created for each module, what later in the pipeline flags the > > invocation of klp-convert. > > > > I tested the following patch with the sources you provided (with little > > modifications, removing the .o from the LIVEPATCH_ definitions and using > > the module name instead of the object names), achieving successful > > compilation and conversion. I also tested against the sample > > livepatches, thus I think it might be ok now. > > Cool thanks for taking a look -- I can confirm that the toy code I sent over > builds with those modifications and so does the sample and selftest I was > working on. I'll set about refactoring that klp-convert selftest to combine > .o files into a more compact module. Hmm, maybe I spoke too soon. I am having issues if I have a two-object livepatch module in which each object file needs to specify its own KLP_MODULE_RELOC for the same symbol name. For example: I have test_klp_convert.ko which is comprised of test_klp_convert_a.o. which needs to refer to state_show,1 and test_klp_convert_b.o. which needs to refer to state_show,2. % make ... KLP lib/livepatch/test_klp_convert.ko klp-convert: Conflicting KLP_SYMPOS definition: vmlinux.state_show,0 vs. vmlinux.state_show,1. klp-convert: Unable to load user-provided sympos make[2]: *** [scripts/Makefile.modpost:148: lib/livepatch/test_klp_convert.ko] Error 255 make[1]: *** [/home/cloud-user/disk/linux/Makefile:1282: modules] Error 2 make: *** [Makefile:170: sub-make] Error 2 I take a closer look next week, but in the meantime, see the source files below. -- Joe ==> lib/livepatch/test_klp_convert_a.c <== #include #include #include /* klp-convert symbols - vmlinux */ extern void *state_show; __used void print_state_show(void) { pr_info("%s: state_show: %p\n", __func__, state_show); } KLP_MODULE_RELOC(vmlinux) vmlinux_relocs_a[] = { KLP_SYMPOS(state_show, 1) }; static struct klp_func funcs[] = { { }, { } }; static struct klp_object objs[] = { { /* name being NULL means vmlinux */ .funcs = funcs, }, { } }; static struct klp_patch patch = { .mod = THIS_MODULE, .objs = objs, }; static int test_klp_convert_init(void) { int ret; ret = klp_enable_patch(&patch); if (ret) return ret; return 0; } static void test_klp_convert_exit(void) { } module_init(test_klp_convert_init); module_exit(test_klp_convert_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Joe Lawrence "); MODULE_DESCRIPTION("Livepatch test: klp-convert"); ==> lib/livepatch/test_klp_convert_b.c <== #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include #include #include /* klp-convert symbols - vmlinux */ extern void *state_show; __used void print_state_show_b(void) { pr_info("%s: state_show: %p\n", __func__, state_show); } KLP_MODULE_RELOC(vmlinux) vmlinux_relocs_b[] = { KLP_SYMPOS(state_show, 2) }; ==> lib/livepatch/Makefile <== # SPDX-License-Identifier: GPL-2.0 # # Makefile for livepatch test code. LIVEPATCH_test_klp_atomic_replace := y LIVEPATCH_test_klp_callbacks_demo := y LIVEPATCH_test_klp_callbacks_demo2 := y LIVEPATCH_test_klp_convert := y LIVEPATCH_test_klp_livepatch := y obj-$(CONFIG_TEST_LIVEPATCH) += test_klp_atomic_replace.o \ test_klp_callbacks_demo.o \ test_klp_callbacks_demo2.o \ test_klp_callbacks_busy.o \ test_klp_callbacks_mod.o \ test_klp_convert.o \ test_klp_livepatch.o \ test_klp_shadow_vars.o test_klp_convert-y := \ test_klp_convert_a.o \ test_klp_convert_b.o # Target modules to be livepatched require CC_FLAGS_FTRACE CFLAGS_test_klp_callbacks_busy.o += $(CC_FLAGS_FTRACE) CFLAGS_test_klp_callbacks_mod.o += $(CC_FLAGS_FTRACE) CFLAGS_test_klp_convert_mod.o += $(CC_FLAGS_FTRACE)