From: Greg KH <greg@kroah.com>
To: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Cc: Rob Herring <robherring2@gmail.com>,
Grant Likely <grant.likely@secretlab.ca>,
Andrew Morton <akpm@linux-foundation.org>,
Matt Porter <mporter@konsulko.com>,
Koen Kooi <koen@dominion.thruhere.net>,
Guenter Roeck <linux@roeck-us.net>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-api@vger.kernel.org
Subject: Re: [PATCH v3 2/4] of: overlay: global sysfs enable attribute
Date: Mon, 27 Apr 2015 20:39:15 +0200 [thread overview]
Message-ID: <20150427183915.GA29312@kroah.com> (raw)
In-Reply-To: <355B6AF0-7F58-4BE4-BEE6-A77246D40652@konsulko.com>
On Mon, Apr 27, 2015 at 09:13:56PM +0300, Pantelis Antoniou wrote:
> Hi Greg,
>
> > On Apr 24, 2015, at 23:29 , Greg KH <greg@kroah.com> wrote:
> >
> > On Fri, Apr 24, 2015 at 12:45:42PM +0300, Pantelis Antoniou wrote:
> >> A throw once master enable switch to protect against any
> >> further overlay applications if the administrator desires so.
> >>
> >> Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
> >> ---
> >> drivers/of/overlay.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
> >> 1 file changed, 44 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
> >> index f17f5ef..c335809 100644
> >> --- a/drivers/of/overlay.c
> >> +++ b/drivers/of/overlay.c
> >> @@ -21,6 +21,7 @@
> >> #include <linux/err.h>
> >> #include <linux/idr.h>
> >> #include <linux/sysfs.h>
> >> +#include <linux/atomic.h>
> >>
> >> #include "of_private.h"
> >>
> >> @@ -55,8 +56,12 @@ struct of_overlay {
> >> struct kobject kobj;
> >> };
> >>
> >> +/* master enable switch; once set to 0 can't be re-enabled */
> >> +static atomic_t ov_enable = ATOMIC_INIT(1);
> >> +
> >> static int of_overlay_apply_one(struct of_overlay *ov,
> >> struct device_node *target, const struct device_node *overlay);
> >> +static int overlay_removal_is_ok(struct of_overlay *ov);
> >>
> >> static int of_overlay_apply_single_property(struct of_overlay *ov,
> >> struct device_node *target, struct property *prop)
> >> @@ -339,6 +344,37 @@ void of_overlay_release(struct kobject *kobj)
> >> kfree(ov);
> >> }
> >>
> >> +static ssize_t enable_show(struct kobject *kobj,
> >> + struct kobj_attribute *attr, char *buf)
> >> +{
> >> + return snprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&ov_enable));
> >> +}
> >> +
> >> +static ssize_t enable_store(struct kobject *kobj,
> >> + struct kobj_attribute *attr, const char *buf, size_t count)
> >> +{
> >> + int ret;
> >> + long new_enable;
> >> +
> >> + ret = kstrtol(buf, 10, &new_enable);
> >> + if (ret != 0)
> >> + return ret;
> >> + if ((unsigned long)new_enable > 1)
> >> + return -EINVAL;
> >> + /* if we've disabled it, no going back */
> >> + if (atomic_read(&ov_enable) == 0)
> >> + return -EPERM;
> >> + atomic_set(&ov_enable, (int)new_enable);
> >> + return count;
> >> +}
> >> +
> >> +static struct kobj_attribute enable_attr = __ATTR_RW(enable);
> >> +
> >> +static const struct attribute *overlay_global_attrs[] = {
> >> + &enable_attr.attr,
> >> + NULL
> >> +};
> >
> > Why not make this an attribute group and then attach it to the kobj_type
> > to create the files in a race-free manner?
> >
>
> Err, these are the global attributes. They are attached to the
> parent of the overlay objects which is a kset object itself.
Ick, no, never attach attributes to a kobject that you don't create
yourself, otherwise it's a race that you lost.
> >> +
> >> static struct kobj_type of_overlay_ktype = {
> >> .release = of_overlay_release,
> >> };
> >> @@ -360,6 +396,10 @@ int of_overlay_create(struct device_node *tree)
> >> struct of_overlay *ov;
> >> int err, id;
> >>
> >> + /* administratively disabled */
> >> + if (!atomic_read(&ov_enable))
> >> + return -EPERM;
> >> +
> >> /* allocate the overlay structure */
> >> ov = kzalloc(sizeof(*ov), GFP_KERNEL);
> >> if (ov == NULL)
> >> @@ -596,5 +636,8 @@ int of_overlay_init(void)
> >> if (!ov_kset)
> >> return -ENOMEM;
> >>
> >> - return 0;
> >> + rc = sysfs_create_files(&ov_kset->kobj, overlay_global_attrs);
> >> + WARN(rc, "%s: error adding global attributes\n", __func__);
> >
> > What can a user do with this warning message? If nothing, then don't
> > print it out, right?
> >
> > You are creating sysfs files _after_ the kobject has been announced to
> > userspace, causing nasty race conditions. Please don't do that.
> >
>
> This is at overlay_init() time, which is way way before userspace ever
> has a chance to start. If there’s a different way to attach a attribute
> group to a kset object I’d like to find out how :)
You can't load this as a module? Where exactly in sysfs is this
kobject, and who creates it?
thanks,
greg k-h
next prev parent reply other threads:[~2015-04-27 18:39 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-24 9:45 [PATCH v3 0/4] of: overlay: kobject & sysfs'ation Pantelis Antoniou
2015-04-24 9:45 ` Pantelis Antoniou
2015-04-24 9:45 ` [PATCH v3 1/4] of: overlay: kobjectify overlay objects Pantelis Antoniou
[not found] ` <1429868744-19863-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
2015-04-24 9:45 ` [PATCH v3 2/4] of: overlay: global sysfs enable attribute Pantelis Antoniou
2015-04-24 9:45 ` Pantelis Antoniou
[not found] ` <1429868744-19863-3-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
2015-04-24 20:29 ` Greg KH
2015-04-24 20:29 ` Greg KH
[not found] ` <20150424202922.GA14970-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2015-04-27 18:13 ` Pantelis Antoniou
2015-04-27 18:13 ` Pantelis Antoniou
2015-04-27 18:39 ` Greg KH [this message]
[not found] ` <20150427183915.GA29312-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2015-04-27 18:43 ` Pantelis Antoniou
2015-04-27 18:43 ` Pantelis Antoniou
2015-04-24 20:36 ` Greg KH
2015-04-24 20:36 ` Greg KH
2015-04-27 18:25 ` Pantelis Antoniou
2015-04-24 9:45 ` [PATCH v3 3/4] of: overlay: add per overlay sysfs attributes Pantelis Antoniou
2015-04-24 9:45 ` Pantelis Antoniou
2015-04-24 9:45 ` [PATCH v3 4/4] Documentation: ABI: /sys/firmware/devicetree/overlays Pantelis Antoniou
2015-04-24 9:45 ` Pantelis Antoniou
2015-04-24 20:31 ` Greg KH
[not found] ` <20150424203121.GB14970-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2015-04-27 17:51 ` Pantelis Antoniou
2015-04-27 17:51 ` Pantelis Antoniou
[not found] ` <C49CC7F9-C877-4590-AA63-F45D2D8E8CDC-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
2015-04-27 18:11 ` Greg KH
2015-04-27 18:11 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150427183915.GA29312@kroah.com \
--to=greg@kroah.com \
--cc=akpm@linux-foundation.org \
--cc=devicetree@vger.kernel.org \
--cc=grant.likely@secretlab.ca \
--cc=koen@dominion.thruhere.net \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=mporter@konsulko.com \
--cc=pantelis.antoniou@konsulko.com \
--cc=robherring2@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.