Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753455AbdHROEu (ORCPT ); Fri, 18 Aug 2017 10:04:50 -0400 Received: from mx2.suse.de ([195.135.220.15]:36820 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752954AbdHROEs (ORCPT ); Fri, 18 Aug 2017 10:04:48 -0400 Date: Fri, 18 Aug 2017 16:04:45 +0200 From: Petr Mladek To: Nicolai Stange Cc: Joe Lawrence , live-patching@vger.kernel.org, linux-kernel@vger.kernel.org, Josh Poimboeuf , Jessica Yu , Jiri Kosina , Miroslav Benes Subject: Re: [PATCH v4] livepatch: introduce shadow variable API Message-ID: <20170818140445.GC25223@pathway.suse.cz> References: <1502740963-31310-1-git-send-email-joe.lawrence@redhat.com> <1502740963-31310-2-git-send-email-joe.lawrence@redhat.com> <87pobtj8hu.fsf@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87pobtj8hu.fsf@suse.de> 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 Content-Length: 1393 Lines: 44 On Fri 2017-08-18 15:44:29, Nicolai Stange wrote: > Joe Lawrence writes: > > > > + > > +/** > > + * klp_shadow_get() - retrieve a shadow variable data pointer > > + * @obj: pointer to parent object > > + * @id: data identifier > > + * > > + * Return: the shadow variable data element, NULL on failure. > > + */ > > +void *klp_shadow_get(void *obj, unsigned long id) > > +{ > > + struct klp_shadow *shadow; > > + > > + rcu_read_lock(); > > + > > + hash_for_each_possible_rcu(klp_shadow_hash, shadow, node, > > + (unsigned long)obj) { > > + > > + if (klp_shadow_match(shadow, obj, id)) { > > + rcu_read_unlock(); > > + return shadow->data; > > I had to think a moment about what protects shadow from getting freed by > a concurrent detach after that rcu_read_unlock(). Then I noticed that if > obj and the livepatch are alive, then so is shadow, because there > obviously hasn't been any reason to detach it. > > So maybe it would be nice to have an additional comment at > klp_shadow_detach() that it's the API user's responsibility not to use a > shadow instance after detaching it... Good point. In fact, it might make sense to rename the functions: attach -> create detach -> destroy The name detach suggests that the variable is just not connected to the parent object but that it is still accessible/usable. Best Regards, Petr