[Devel] [PATCH RHEL7 COMMIT] Revert "ms/fs: Add user namespace member to struct super_block"
Konstantin Khorenko
khorenko at virtuozzo.com
Fri Jul 21 11:00:37 MSK 2017
The commit is pushed to "branch-rh7-3.10.0-514.26.1.vz7.33.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-514.26.1.vz7.33.12
------>
commit 5b75319189d36a1572b1b8b51c7e0c53374ec876
Author: Konstantin Khorenko <khorenko at virtuozzo.com>
Date: Fri Jul 21 11:57:43 2017 +0400
Revert "ms/fs: Add user namespace member to struct super_block"
This reverts commit 1352424aae378f285da1b36719e86b5069c693c2.
Temporary revert due to
https://jira.sw.ru/browse/PSBM-68599
Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
---
fs/super.c | 52 ++++++----------------------------------------------
include/linux/fs.h | 12 ------------
2 files changed, 6 insertions(+), 58 deletions(-)
diff --git a/fs/super.c b/fs/super.c
index 3e067e1..7470621 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -35,7 +35,6 @@
#include <linux/fsnotify.h>
#include <linux/lockdep.h>
#include <linux/memcontrol.h>
-#include <linux/user_namespace.h>
#include "internal.h"
const unsigned super_block_wrapper_version = 0;
@@ -172,7 +171,6 @@ static void destroy_super(struct super_block *s)
percpu_counter_destroy(&s->s_writers.counter[i]);
security_sb_free(s);
WARN_ON(!list_empty(&s->s_mounts));
- put_user_ns(s->s_user_ns);
kfree(s->s_subtype);
kfree(s->s_options);
kfree(s);
@@ -182,13 +180,11 @@ static void destroy_super(struct super_block *s)
* alloc_super - create new superblock
* @type: filesystem type superblock should belong to
* @flags: the mount flags
- * @user_ns: User namespace for the super_block
*
* Allocates and initializes a new &struct super_block. alloc_super()
* returns a pointer new superblock or %NULL if allocation had failed.
*/
-static struct super_block *alloc_super(struct file_system_type *type, int flags,
- struct user_namespace *user_ns)
+static struct super_block *alloc_super(struct file_system_type *type, int flags)
{
struct super_block *s = kzalloc(sizeof(struct super_block_wrapper), GFP_USER);
static const struct super_operations default_op;
@@ -198,7 +194,6 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags,
return NULL;
INIT_LIST_HEAD(&s->s_mounts);
- s->s_user_ns = get_user_ns(user_ns);
if (security_sb_alloc(s))
goto fail;
@@ -459,18 +454,17 @@ void generic_shutdown_super(struct super_block *sb)
EXPORT_SYMBOL(generic_shutdown_super);
/**
- * sget_userns - find or create a superblock
+ * sget - find or create a superblock
* @type: filesystem type superblock should belong to
* @test: comparison callback
* @set: setup callback
* @flags: mount flags
- * @user_ns: User namespace for the super_block
* @data: argument to each of them
*/
-struct super_block *sget_userns(struct file_system_type *type,
+struct super_block *sget(struct file_system_type *type,
int (*test)(struct super_block *,void *),
int (*set)(struct super_block *,void *),
- int flags, struct user_namespace *user_ns,
+ int flags,
void *data)
{
struct super_block *s = NULL;
@@ -483,14 +477,6 @@ struct super_block *sget_userns(struct file_system_type *type,
hlist_for_each_entry(old, &type->fs_supers, s_instances) {
if (!test(old, data))
continue;
- if (user_ns != old->s_user_ns) {
- spin_unlock(&sb_lock);
- if (s) {
- up_write(&s->s_umount);
- destroy_super(s);
- }
- return ERR_PTR(-EBUSY);
- }
if (!grab_super(old))
goto retry;
if (s) {
@@ -503,7 +489,7 @@ struct super_block *sget_userns(struct file_system_type *type,
}
if (!s) {
spin_unlock(&sb_lock);
- s = alloc_super(type, flags, user_ns);
+ s = alloc_super(type, flags);
if (!s)
return ERR_PTR(-ENOMEM);
goto retry;
@@ -526,31 +512,6 @@ struct super_block *sget_userns(struct file_system_type *type,
return s;
}
-EXPORT_SYMBOL(sget_userns);
-
-/**
- * sget - find or create a superblock
- * @type: filesystem type superblock should belong to
- * @test: comparison callback
- * @set: setup callback
- * @flags: mount flags
- * @data: argument to each of them
- */
-struct super_block *sget(struct file_system_type *type,
- int (*test)(struct super_block *,void *),
- int (*set)(struct super_block *,void *),
- int flags,
- void *data)
-{
- struct user_namespace *user_ns = current_user_ns();
-
- /* Ensure the requestor has permissions over the target filesystem */
- if (!(flags & MS_KERNMOUNT) && !ns_capable(user_ns, CAP_SYS_ADMIN))
- return ERR_PTR(-EPERM);
-
- return sget_userns(type, test, set, flags, user_ns, data);
-}
-
EXPORT_SYMBOL(sget);
void drop_super(struct super_block *sb)
@@ -964,8 +925,7 @@ struct dentry *mount_ns(struct file_system_type *fs_type, int flags,
{
struct super_block *sb;
- sb = sget_userns(fs_type, ns_test_super, ns_set_super, flags,
- current_user_ns(), data);
+ sb = sget(fs_type, ns_test_super, ns_set_super, flags, data);
if (IS_ERR(sb))
return ERR_CAST(sb);
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 6b509f8..06892d6 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1572,13 +1572,6 @@ struct super_block {
RH_KABI_EXTEND(struct workqueue_struct *s_dio_done_wq)
/*
- * Owning user namespace and default context in which to
- * interpret filesystem uids, gids, quotas, device nodes,
- * xattrs and security labels.
- */
- struct user_namespace *s_user_ns;
-
- /*
* Keep the lru lists last in the structure so they always sit on their
* own individual cachelines.
*/
@@ -2285,11 +2278,6 @@ void put_super(struct super_block *sb);
int set_anon_super(struct super_block *s, void *data);
int get_anon_bdev(dev_t *);
void free_anon_bdev(dev_t);
-struct super_block *sget_userns(struct file_system_type *type,
- int (*test)(struct super_block *,void *),
- int (*set)(struct super_block *,void *),
- int flags, struct user_namespace *user_ns,
- void *data);
struct super_block *sget(struct file_system_type *type,
int (*test)(struct super_block *,void *),
int (*set)(struct super_block *,void *),
More information about the Devel
mailing list