|
@@ -15,6 +15,7 @@
|
|
|
#include <linux/lockdep.h>
|
|
|
#include <linux/rbtree.h>
|
|
|
#include <linux/atomic.h>
|
|
|
+#include <linux/uidgid.h>
|
|
|
#include <linux/wait.h>
|
|
|
|
|
|
struct file;
|
|
@@ -325,12 +326,14 @@ void kernfs_destroy_root(struct kernfs_root *root);
|
|
|
|
|
|
struct kernfs_node *kernfs_create_dir_ns(struct kernfs_node *parent,
|
|
|
const char *name, umode_t mode,
|
|
|
+ kuid_t uid, kgid_t gid,
|
|
|
void *priv, const void *ns);
|
|
|
struct kernfs_node *kernfs_create_empty_dir(struct kernfs_node *parent,
|
|
|
const char *name);
|
|
|
struct kernfs_node *__kernfs_create_file(struct kernfs_node *parent,
|
|
|
- const char *name,
|
|
|
- umode_t mode, loff_t size,
|
|
|
+ const char *name, umode_t mode,
|
|
|
+ kuid_t uid, kgid_t gid,
|
|
|
+ loff_t size,
|
|
|
const struct kernfs_ops *ops,
|
|
|
void *priv, const void *ns,
|
|
|
struct lock_class_key *key);
|
|
@@ -415,12 +418,14 @@ static inline void kernfs_destroy_root(struct kernfs_root *root) { }
|
|
|
|
|
|
static inline struct kernfs_node *
|
|
|
kernfs_create_dir_ns(struct kernfs_node *parent, const char *name,
|
|
|
- umode_t mode, void *priv, const void *ns)
|
|
|
+ umode_t mode, kuid_t uid, kgid_t gid,
|
|
|
+ void *priv, const void *ns)
|
|
|
{ return ERR_PTR(-ENOSYS); }
|
|
|
|
|
|
static inline struct kernfs_node *
|
|
|
__kernfs_create_file(struct kernfs_node *parent, const char *name,
|
|
|
- umode_t mode, loff_t size, const struct kernfs_ops *ops,
|
|
|
+ umode_t mode, kuid_t uid, kgid_t gid,
|
|
|
+ loff_t size, const struct kernfs_ops *ops,
|
|
|
void *priv, const void *ns, struct lock_class_key *key)
|
|
|
{ return ERR_PTR(-ENOSYS); }
|
|
|
|
|
@@ -498,12 +503,15 @@ static inline struct kernfs_node *
|
|
|
kernfs_create_dir(struct kernfs_node *parent, const char *name, umode_t mode,
|
|
|
void *priv)
|
|
|
{
|
|
|
- return kernfs_create_dir_ns(parent, name, mode, priv, NULL);
|
|
|
+ return kernfs_create_dir_ns(parent, name, mode,
|
|
|
+ GLOBAL_ROOT_UID, GLOBAL_ROOT_GID,
|
|
|
+ priv, NULL);
|
|
|
}
|
|
|
|
|
|
static inline struct kernfs_node *
|
|
|
kernfs_create_file_ns(struct kernfs_node *parent, const char *name,
|
|
|
- umode_t mode, loff_t size, const struct kernfs_ops *ops,
|
|
|
+ umode_t mode, kuid_t uid, kgid_t gid,
|
|
|
+ loff_t size, const struct kernfs_ops *ops,
|
|
|
void *priv, const void *ns)
|
|
|
{
|
|
|
struct lock_class_key *key = NULL;
|
|
@@ -511,15 +519,17 @@ kernfs_create_file_ns(struct kernfs_node *parent, const char *name,
|
|
|
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
|
|
key = (struct lock_class_key *)&ops->lockdep_key;
|
|
|
#endif
|
|
|
- return __kernfs_create_file(parent, name, mode, size, ops, priv, ns,
|
|
|
- key);
|
|
|
+ return __kernfs_create_file(parent, name, mode, uid, gid,
|
|
|
+ size, ops, priv, ns, key);
|
|
|
}
|
|
|
|
|
|
static inline struct kernfs_node *
|
|
|
kernfs_create_file(struct kernfs_node *parent, const char *name, umode_t mode,
|
|
|
loff_t size, const struct kernfs_ops *ops, void *priv)
|
|
|
{
|
|
|
- return kernfs_create_file_ns(parent, name, mode, size, ops, priv, NULL);
|
|
|
+ return kernfs_create_file_ns(parent, name, mode,
|
|
|
+ GLOBAL_ROOT_UID, GLOBAL_ROOT_GID,
|
|
|
+ size, ops, priv, NULL);
|
|
|
}
|
|
|
|
|
|
static inline int kernfs_remove_by_name(struct kernfs_node *parent,
|