Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp4013763imm; Mon, 11 Jun 2018 05:43:47 -0700 (PDT) X-Google-Smtp-Source: ADUXVKIIpOfVFeuQSk2dW0fHT+UoDCOWLmbWUqypoi6fe6cGixiezrqNVUE5ajMqu6QO6qm5w0j9 X-Received: by 2002:a17:902:8d85:: with SMTP id v5-v6mr18477570plo.93.1528721027437; Mon, 11 Jun 2018 05:43:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528721027; cv=none; d=google.com; s=arc-20160816; b=TJf30FNMQkr1FjbMIl7NkDf2d6KJpszlb+6fk8vG1pwo5EIjsOWuciB9E2wkfKNvqT hHqWnQWiHqE7Kvl8Ksa6QTmdBAzvpN8Dxjpx/ghvo/yVhWwwsGuC414SvkW6tyRRsFPY OHNPYzxEQiQ8Lk1ANkolSD1kfKIgYr9yx7j2Fe9wZQkGsGGv17tCJ0G4SXwdOhhp2hcv JLWtz/MGVxmsofaRxTz+ZQYzr+RQ6urVzq6Y5Av7SCHI5lS7oja5ptks+MOocPnLd1Vx VeBGsB/jUeQsjcClh7qXQiCvTZSD5i8C8t3cy0fyVwAUjDl+oe77YQ9BEdYM14FDwY86 WQRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :message-id:in-reply-to:subject:cc:to:from:date :arc-authentication-results; bh=pd3b1PPEIa9QNSvZ0zmgoUvCx7JrflVOG644IZt22Lg=; b=nmoPp4RuIuoXW4HLHfmSzWon+bO7Jk/HixYgS/yHDtsifGArOLG1nJPeGblHw+K4kb 60ljqhFES0TxS5rrs1pCn8s2IgjRPedsVIqm9VnlWh+opH6EkHsL8hVlfNt1J3w3KCE1 YWsGGG52cknk+Yymf1byj1bNfNq5CCveygC9MnSkEDzfwT+OdFjKVYhlmjEyZviiXVdr SCVhx/+25pGqMeScrDy3eAWyDkb1HnBapX5ADibdBbgE+elJTdv6iSrtjX5NPabytoJq PgFgYG1VRCx+3cZ6Tnes8Jw95MLE/huKBaTFCymFeEoeK7V53lSCC5Mmgt5o5V5VyxLC HCKQ== 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 x11-v6si5680199pgp.4.2018.06.11.05.43.33; Mon, 11 Jun 2018 05:43: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 S933039AbeFKMnF (ORCPT + 99 others); Mon, 11 Jun 2018 08:43:05 -0400 Received: from mx2.suse.de ([195.135.220.15]:47323 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932882AbeFKMnD (ORCPT ); Mon, 11 Jun 2018 08:43:03 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext-too.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 82F7EAF2D; Mon, 11 Jun 2018 12:43:02 +0000 (UTC) Date: Mon, 11 Jun 2018 14:43:01 +0200 (CEST) From: Miroslav Benes To: Petr Mladek cc: jikos@kernel.org, jpoimboe@redhat.com, jeyu@kernel.org, live-patching@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/3] livepatch: Deny the patched modules to be removed In-Reply-To: <20180611114121.2u7wt6d6xu2cm6it@pathway.suse.cz> Message-ID: References: <20180607092949.1706-1-mbenes@suse.cz> <20180607092949.1706-3-mbenes@suse.cz> <20180611114121.2u7wt6d6xu2cm6it@pathway.suse.cz> User-Agent: Alpine 2.21 (LSU 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 11 Jun 2018, Petr Mladek wrote: > On Thu 2018-06-07 11:29:48, Miroslav Benes wrote: > > We decided to deny the patched modules to be removed. If it proves to be > > a major drawback for users, we can still implement a different approach. > > > > The reference of a patched module has to be taken regardless of a > > patch's state. Thus it is not taken and dropped in enable/disable paths, > > but in register/unregister paths. > > > --- a/kernel/livepatch/core.c > > +++ b/kernel/livepatch/core.c > > @@ -739,6 +746,14 @@ static int klp_init_object_loaded(struct klp_patch *patch, > > } > > } > > > > + /* > > + * Do not allow patched modules to be removed. > > + * > > + * All callers of klp_init_object_loaded() set obj->mod. > > + */ > > + if (klp_is_module(obj) && !try_module_get(obj->mod)) > > + return -ENODEV; > > + > > return 0; > > } > > This looks strange. We try to take the reference after we do all > actions needed for a loaded module. There is nothing that would > prevent obj->mod to get into the going state. Yes, there was an intention to keep the number of necessary modifications of the error paths as low as possible. > Note that it was safe (except for the relocated symbols) because > the module was not able to really go until it called > klp_module_going(). But you removed this last break > by the 3rd patch. Yes, try_module_get() would return an error here. > I suggest another approach: > > I would rename klp_find_object_module() to klp_get_object_module() > and get the reference there. Note that it should be fine to call > it later in klp_init_object() (before klp_init_object_loaded()). > This would solve klp_init_patch(). > > We will also need to get the reference in klp_module_coming(). > It can be called anywhere there. If it fails, we will block > loading the module. I can as well move the above hunk up in klp_init_object_loaded(), no? Not that I'm seeing a problem to have it in klp_find_object_module(). > Note that the mod->klp_alive logic will still be necessary. > It solves various races when both the patch and the patched > module are loaded in parallel. > > Sigh, this also means that we still could call klp_init_object_loaded() > and apply reloacations even when the patched module fails to loaded > later from other reasons. This means that this approach does not > solve the original problem completely. That would be in klp_module_coming(). Hm, you're right. > I wonder how complicated would be the arch-specific part that > would clean up relocations when the module is unloaded. I don't think it would be complicated. We just want to avoid it, because it is arch-specific. It is more difficult to maintain such code. Regards, Miroslav