aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/orangefs/devorangefs-req.c7
-rw-r--r--fs/orangefs/orangefs-cache.c4
-rw-r--r--fs/orangefs/orangefs-kernel.h4
-rw-r--r--fs/orangefs/orangefs-utils.c4
-rw-r--r--fs/orangefs/xattr.c4
5 files changed, 15 insertions, 8 deletions
diff --git a/fs/orangefs/devorangefs-req.c b/fs/orangefs/devorangefs-req.c
index db170beba797..a287a66d94e3 100644
--- a/fs/orangefs/devorangefs-req.c
+++ b/fs/orangefs/devorangefs-req.c
@@ -116,6 +116,13 @@ static int orangefs_devreq_open(struct inode *inode, struct file *file)
116{ 116{
117 int ret = -EINVAL; 117 int ret = -EINVAL;
118 118
119 /* in order to ensure that the filesystem driver sees correct UIDs */
120 if (file->f_cred->user_ns != &init_user_ns) {
121 gossip_err("%s: device cannot be opened outside init_user_ns\n",
122 __func__);
123 goto out;
124 }
125
119 if (!(file->f_flags & O_NONBLOCK)) { 126 if (!(file->f_flags & O_NONBLOCK)) {
120 gossip_err("%s: device cannot be opened in blocking mode\n", 127 gossip_err("%s: device cannot be opened in blocking mode\n",
121 __func__); 128 __func__);
diff --git a/fs/orangefs/orangefs-cache.c b/fs/orangefs/orangefs-cache.c
index 900a2e38e11b..b6edbe9fb309 100644
--- a/fs/orangefs/orangefs-cache.c
+++ b/fs/orangefs/orangefs-cache.c
@@ -136,10 +136,10 @@ struct orangefs_kernel_op_s *op_alloc(__s32 type)
136 llu(new_op->tag), 136 llu(new_op->tag),
137 get_opname_string(new_op)); 137 get_opname_string(new_op));
138 138
139 new_op->upcall.uid = from_kuid(current_user_ns(), 139 new_op->upcall.uid = from_kuid(&init_user_ns,
140 current_fsuid()); 140 current_fsuid());
141 141
142 new_op->upcall.gid = from_kgid(current_user_ns(), 142 new_op->upcall.gid = from_kgid(&init_user_ns,
143 current_fsgid()); 143 current_fsgid());
144 } else { 144 } else {
145 gossip_err("op_alloc: kmem_cache_zalloc failed!\n"); 145 gossip_err("op_alloc: kmem_cache_zalloc failed!\n");
diff --git a/fs/orangefs/orangefs-kernel.h b/fs/orangefs/orangefs-kernel.h
index 7b542f168d44..c1181e5529af 100644
--- a/fs/orangefs/orangefs-kernel.h
+++ b/fs/orangefs/orangefs-kernel.h
@@ -587,8 +587,8 @@ int service_operation(struct orangefs_kernel_op_s *op,
587 587
588#define fill_default_sys_attrs(sys_attr, type, mode) \ 588#define fill_default_sys_attrs(sys_attr, type, mode) \
589do { \ 589do { \
590 sys_attr.owner = from_kuid(current_user_ns(), current_fsuid()); \ 590 sys_attr.owner = from_kuid(&init_user_ns, current_fsuid()); \
591 sys_attr.group = from_kgid(current_user_ns(), current_fsgid()); \ 591 sys_attr.group = from_kgid(&init_user_ns, current_fsgid()); \
592 sys_attr.perms = ORANGEFS_util_translate_mode(mode); \ 592 sys_attr.perms = ORANGEFS_util_translate_mode(mode); \
593 sys_attr.mtime = 0; \ 593 sys_attr.mtime = 0; \
594 sys_attr.atime = 0; \ 594 sys_attr.atime = 0; \
diff --git a/fs/orangefs/orangefs-utils.c b/fs/orangefs/orangefs-utils.c
index 2d129b5886ee..c5fbc62357c6 100644
--- a/fs/orangefs/orangefs-utils.c
+++ b/fs/orangefs/orangefs-utils.c
@@ -153,12 +153,12 @@ static inline int copy_attributes_from_inode(struct inode *inode,
153 */ 153 */
154 attrs->mask = 0; 154 attrs->mask = 0;
155 if (iattr->ia_valid & ATTR_UID) { 155 if (iattr->ia_valid & ATTR_UID) {
156 attrs->owner = from_kuid(current_user_ns(), iattr->ia_uid); 156 attrs->owner = from_kuid(&init_user_ns, iattr->ia_uid);
157 attrs->mask |= ORANGEFS_ATTR_SYS_UID; 157 attrs->mask |= ORANGEFS_ATTR_SYS_UID;
158 gossip_debug(GOSSIP_UTILS_DEBUG, "(UID) %d\n", attrs->owner); 158 gossip_debug(GOSSIP_UTILS_DEBUG, "(UID) %d\n", attrs->owner);
159 } 159 }
160 if (iattr->ia_valid & ATTR_GID) { 160 if (iattr->ia_valid & ATTR_GID) {
161 attrs->group = from_kgid(current_user_ns(), iattr->ia_gid); 161 attrs->group = from_kgid(&init_user_ns, iattr->ia_gid);
162 attrs->mask |= ORANGEFS_ATTR_SYS_GID; 162 attrs->mask |= ORANGEFS_ATTR_SYS_GID;
163 gossip_debug(GOSSIP_UTILS_DEBUG, "(GID) %d\n", attrs->group); 163 gossip_debug(GOSSIP_UTILS_DEBUG, "(GID) %d\n", attrs->group);
164 } 164 }
diff --git a/fs/orangefs/xattr.c b/fs/orangefs/xattr.c
index 73a0c3411d4b..2a9f07f06d10 100644
--- a/fs/orangefs/xattr.c
+++ b/fs/orangefs/xattr.c
@@ -79,8 +79,8 @@ ssize_t orangefs_inode_getxattr(struct inode *inode, const char *name,
79 return -EINVAL; 79 return -EINVAL;
80 } 80 }
81 81
82 fsuid = from_kuid(current_user_ns(), current_fsuid()); 82 fsuid = from_kuid(&init_user_ns, current_fsuid());
83 fsgid = from_kgid(current_user_ns(), current_fsgid()); 83 fsgid = from_kgid(&init_user_ns, current_fsgid());
84 84
85 gossip_debug(GOSSIP_XATTR_DEBUG, 85 gossip_debug(GOSSIP_XATTR_DEBUG,
86 "getxattr on inode %pU, name %s " 86 "getxattr on inode %pU, name %s "