diff options
| -rw-r--r-- | fs/orangefs/devorangefs-req.c | 7 | ||||
| -rw-r--r-- | fs/orangefs/orangefs-cache.c | 4 | ||||
| -rw-r--r-- | fs/orangefs/orangefs-kernel.h | 4 | ||||
| -rw-r--r-- | fs/orangefs/orangefs-utils.c | 4 | ||||
| -rw-r--r-- | fs/orangefs/xattr.c | 4 |
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) \ |
| 589 | do { \ | 589 | do { \ |
| 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 " |
