From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2F912C11D05 for ; Thu, 20 Feb 2020 11:15:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 090EB2465D for ; Thu, 20 Feb 2020 11:15:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582197356; bh=DwGqJR7vwgavTiM12x46v49zD2NV2riwsvV94EwK5Ck=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=Y1udHl0injTraJWJFXrk1IGdr4yyQuCF5r8QnlpqTp3q40ohJIP3vKwA4WKDvn+Wi xN98ZqsEwiarVszTB9VNtLonbD1tb3VAVq+kpdxUPyZ5R9qXjh+U1rYrJ2FEMWBYE0 LQHVpgciYPeprDylmHRjUny9f7WdARHXHzH+X1Cg= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727709AbgBTLPx (ORCPT ); Thu, 20 Feb 2020 06:15:53 -0500 Received: from mail.kernel.org ([198.145.29.99]:50588 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726825AbgBTLPx (ORCPT ); Thu, 20 Feb 2020 06:15:53 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3FF8F207FD; Thu, 20 Feb 2020 11:15:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582197352; bh=DwGqJR7vwgavTiM12x46v49zD2NV2riwsvV94EwK5Ck=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=UoS+KT7RMS9xGeLh6laqlJHIm78ee0CaF0wg74A0zXvTOoh6UYbp0viN9wVDwfTP4 Ne3QjKNuMEo40Ajfujqm42hy6jEuRseZWwiOKwAeXhlR3wzg4AreobnxpiG8oPGpA3 d4RFH/18tTZKlN2KxUmL+QiCGOK+oUratVUwVTcU= Date: Thu, 20 Feb 2020 12:15:50 +0100 From: Greg Kroah-Hartman To: Christian Brauner Cc: "David S. Miller" , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, "Rafael J. Wysocki" , Pavel Machek , Jakub Kicinski , Eric Dumazet , Stephen Hemminger , linux-pm@vger.kernel.org Subject: Re: [PATCH net-next v3 3/9] sysfs: add sysfs_group{s}_change_owner() Message-ID: <20200220111550.GE3374196@kroah.com> References: <20200218162943.2488012-1-christian.brauner@ubuntu.com> <20200218162943.2488012-4-christian.brauner@ubuntu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200218162943.2488012-4-christian.brauner@ubuntu.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Tue, Feb 18, 2020 at 05:29:37PM +0100, Christian Brauner wrote: > Add helpers to change the owner of sysfs groups. > This function will be used to correctly account for kobject ownership > changes, e.g. when moving network devices between network namespaces. > > Signed-off-by: Christian Brauner > --- > /* v2 */ > - Greg Kroah-Hartman : > - Add comment how ownership of sysfs object is changed. > > /* v3 */ > - Greg Kroah-Hartman : > - Add explicit uid/gid parameters. > - Christian Brauner : > - Collapse groups ownership helper patches into a single patch. > --- > fs/sysfs/group.c | 117 ++++++++++++++++++++++++++++++++++++++++++ > include/linux/sysfs.h | 20 ++++++++ > 2 files changed, 137 insertions(+) > > diff --git a/fs/sysfs/group.c b/fs/sysfs/group.c > index c4ab045926b7..bae562d3cba1 100644 > --- a/fs/sysfs/group.c > +++ b/fs/sysfs/group.c > @@ -13,6 +13,7 @@ > #include > #include > #include > +#include > #include "sysfs.h" > > > @@ -457,3 +458,119 @@ int __compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj, > return PTR_ERR_OR_ZERO(link); > } > EXPORT_SYMBOL_GPL(__compat_only_sysfs_link_entry_to_kobj); > + > +static int sysfs_group_attrs_change_owner(struct kernfs_node *grp_kn, > + const struct attribute_group *grp, > + struct iattr *newattrs) > +{ > + struct kernfs_node *kn; > + int error; > + > + if (grp->attrs) { > + struct attribute *const *attr; > + > + for (attr = grp->attrs; *attr; attr++) { > + kn = kernfs_find_and_get(grp_kn, (*attr)->name); > + if (!kn) > + return -ENOENT; > + > + error = kernfs_setattr(kn, newattrs); > + kernfs_put(kn); > + if (error) > + return error; > + } > + } > + > + if (grp->bin_attrs) { > + struct bin_attribute *const *bin_attr; > + > + for (bin_attr = grp->bin_attrs; *bin_attr; bin_attr++) { > + kn = kernfs_find_and_get(grp_kn, (*bin_attr)->attr.name); > + if (!kn) > + return -ENOENT; > + > + error = kernfs_setattr(kn, newattrs); > + kernfs_put(kn); > + if (error) > + return error; > + } > + } > + > + return 0; > +} > + > +/** > + * sysfs_group_change_owner - change owner of an attribute group. > + * @kobj: The kobject containing the group. > + * @grp: The attribute group. > + * @kuid: new owner's kuid > + * @kgid: new owner's kgid > + * > + * Returns 0 on success or error code on failure. This is fine to document, just funny it's the only one documented about the return value so far in this series. Anyway, looks good to me: Reviewed-by: Greg Kroah-Hartman