forked from Minki/linux
driver core: set up ownership of class devices in sysfs
Plumb in get_ownership() callback for devices belonging to a class so that they can be created with uid/gid different from global root. This will allow network devices in a container to belong to container's root and not global root. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Reviewed-by: Tyler Hicks <tyhicks@canonical.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d028b6f703
commit
9944e894c1
@ -866,10 +866,19 @@ static const void *device_namespace(struct kobject *kobj)
|
||||
return ns;
|
||||
}
|
||||
|
||||
static void device_get_ownership(struct kobject *kobj, kuid_t *uid, kgid_t *gid)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj);
|
||||
|
||||
if (dev->class && dev->class->get_ownership)
|
||||
dev->class->get_ownership(dev, uid, gid);
|
||||
}
|
||||
|
||||
static struct kobj_type device_ktype = {
|
||||
.release = device_release,
|
||||
.sysfs_ops = &dev_sysfs_ops,
|
||||
.namespace = device_namespace,
|
||||
.get_ownership = device_get_ownership,
|
||||
};
|
||||
|
||||
|
||||
|
@ -384,6 +384,9 @@ int subsys_virtual_register(struct bus_type *subsys,
|
||||
* @shutdown_pre: Called at shut-down time before driver shutdown.
|
||||
* @ns_type: Callbacks so sysfs can detemine namespaces.
|
||||
* @namespace: Namespace of the device belongs to this class.
|
||||
* @get_ownership: Allows class to specify uid/gid of the sysfs directories
|
||||
* for the devices belonging to the class. Usually tied to
|
||||
* device's namespace.
|
||||
* @pm: The default device power management operations of this class.
|
||||
* @p: The private data of the driver core, no one other than the
|
||||
* driver core can touch this.
|
||||
@ -413,6 +416,8 @@ struct class {
|
||||
const struct kobj_ns_type_operations *ns_type;
|
||||
const void *(*namespace)(struct device *dev);
|
||||
|
||||
void (*get_ownership)(struct device *dev, kuid_t *uid, kgid_t *gid);
|
||||
|
||||
const struct dev_pm_ops *pm;
|
||||
|
||||
struct subsys_private *p;
|
||||
|
Loading…
Reference in New Issue
Block a user