Received: by 2002:a25:f815:0:0:0:0:0 with SMTP id u21csp2258823ybd; Mon, 24 Jun 2019 03:27:47 -0700 (PDT) X-Google-Smtp-Source: APXvYqzHNj4z6PHXF9MGYrtEvoZcnOmn6IYv79S6j7D5HEdOqYdLC1689ctRR4UYBZHRSzXEc6rS X-Received: by 2002:a17:902:4222:: with SMTP id g31mr70351995pld.41.1561372067525; Mon, 24 Jun 2019 03:27:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561372067; cv=none; d=google.com; s=arc-20160816; b=0wlUI+TWuEHXQ9gMg8bn/yce245aCUwUq+n7eXTF8ejUzT8SCfd5qGBzt4sSyCkUza idAVJob3JmBgmwzZgNxDL8G76l3pHIR56On4eBESfeGVUYRlhWZBicHipjuTzMuskBFR U++ycoNKtvt+/bMAFplUPncy3aM4ykMFbJjQWQ4QCNr0CCz4JJfuQCB2mP2MHPG9vJqt 0YpG6f+nZjLnpGKRDSHTqcIQMuB1J/4H2HTMy7dkA4/JgUhezT1hv+EtkMrJvaF7KQg9 oqFQDNURPopdg4EagNRUPJpCxShlIsoDlEK6x0myf/9owniMQ1gFi0zQjOY6xsP2Fj1m hMtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:message-id:in-reply-to:date:references:subject:cc:to :from; bh=DfkoSK22L3WbqjXgXdEeJBYtDr4ZByenrjuw8gnUIWI=; b=Nh19ZP42TiswSqencTNsZs4/yGgdThKF3mBcop6qnFaItdSEdySfd+P23IhDVzlWFZ OzitZ8w4NvNUAAtCsJQ8YwfH6ZnRx0giLKy85moVPTvln+A10S7UG3GyqMpB5czKHCJ4 BjRAAoYHDVOJ9tlJdwRObcFr1w8VDU9P/YHX1y5MqrMCyVSHpBBUsimci8HbA9DHKGxj tuYIkRNQTc8Qo5VpEEe+XC7GtLzFan7J9+HTQG3z2KQ7ouFBxGdx3DtsMhMGtFkuffgf tXGg3lBwD71Ygm9UeJbQ0DIQFbaZoN1bUZCTtNZ2bvh1oqeAVGYxEE74upx0l291Td6Q ZaFQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o1si11165586pja.67.2019.06.24.03.27.31; Mon, 24 Jun 2019 03:27:47 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728799AbfFXK0K convert rfc822-to-8bit (ORCPT + 99 others); Mon, 24 Jun 2019 06:26:10 -0400 Received: from mx2.suse.de ([195.135.220.15]:42386 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727101AbfFXK0K (ORCPT ); Mon, 24 Jun 2019 06:26:10 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id AE358AC98; Mon, 24 Jun 2019 10:26:08 +0000 (UTC) From: Nicolai Stange To: Petr Mladek Cc: Jiri Kosina , Josh Poimboeuf , Miroslav Benes , Joe Lawrence , Kamalesh Babulal , Nicolai Stange , live-patching@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [RFC 3/5] livepatch: Allow to distinguish different version of system state changes References: <20190611135627.15556-1-pmladek@suse.com> <20190611135627.15556-4-pmladek@suse.com> Date: Mon, 24 Jun 2019 12:26:07 +0200 In-Reply-To: <20190611135627.15556-4-pmladek@suse.com> (Petr Mladek's message of "Tue, 11 Jun 2019 15:56:25 +0200") Message-ID: <87o92n2sao.fsf@suse.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Petr Mladek writes: > --- > include/linux/livepatch.h | 2 ++ > kernel/livepatch/core.c | 8 ++++++++ > kernel/livepatch/state.c | 40 +++++++++++++++++++++++++++++++++++++++- > kernel/livepatch/state.h | 9 +++++++++ > 4 files changed, 58 insertions(+), 1 deletion(-) > create mode 100644 kernel/livepatch/state.h > > diff --git a/include/linux/livepatch.h b/include/linux/livepatch.h > index 591abdee30d7..8bc4c6cc3f3f 100644 > --- a/include/linux/livepatch.h > +++ b/include/linux/livepatch.h > @@ -135,10 +135,12 @@ struct klp_object { > /** > * struct klp_state - state of the system modified by the livepatch > * @id: system state identifier (non zero) > + * @version: version of the change (non-zero) > * @data: custom data > */ > struct klp_state { > int id; > + int version; > void *data; > }; > > diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c > index 24c4a13bd26c..614642719825 100644 > --- a/kernel/livepatch/core.c > +++ b/kernel/livepatch/core.c > @@ -21,6 +21,7 @@ > #include > #include "core.h" > #include "patch.h" > +#include "state.h" > #include "transition.h" > > /* > @@ -1003,6 +1004,13 @@ int klp_enable_patch(struct klp_patch *patch) > > mutex_lock(&klp_mutex); > > + if(!klp_is_patch_compatible(patch)) { > + pr_err("Livepatch patch (%s) is not compatible with the already installed livepatches.\n", > + patch->mod->name); > + mutex_unlock(&klp_mutex); > + return -EINVAL; > + } > + > ret = klp_init_patch_early(patch); > if (ret) { > mutex_unlock(&klp_mutex); Just as a remark: klp_reverse_transition() could still transition back to a !klp_is_patch_compatible() patch. I don't think it's much of a problem, because for live patches introducing completely new states to the system, it is reasonable to assume that they'll start applying incompatible changes only from their ->post_patch(), I guess. For state "upgrades" to higher versions, it's not so clear though and some care will be needed. But I think these could still be handled safely at the cost of some complexity in the new live patch's ->post_patch(). Another detail is that ->post_unpatch() will be called for the new live patch which has been unpatched due to transition reversal and one would have to be careful not to free shared state from under the older, still active live patch. How would ->post_unpatch() distinguish between transition reversal and "normal" live patch disabling? By klp_get_prev_state() != NULL? Perhaps transition reversal should be mentioned in the documentation? Thanks, Nicolai -- SUSE Linux GmbH, GF: Felix Imendörffer, Mary Higgins, Sri Rasiah, HRB 21284 (AG Nürnberg)