]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ns: add ns_common_free()
authorChristian Brauner <brauner@kernel.org>
Wed, 17 Sep 2025 10:28:08 +0000 (12:28 +0200)
committerChristian Brauner <brauner@kernel.org>
Fri, 19 Sep 2025 14:22:36 +0000 (16:22 +0200)
And drop ns_free_inum(). Anything common that can be wasted centrally
should be wasted in the new common helper.

Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/namespace.c
include/linux/ns_common.h
include/linux/proc_ns.h
ipc/namespace.c
kernel/cgroup/namespace.c
kernel/nscommon.c
kernel/pid_namespace.c
kernel/time/namespace.c
kernel/user_namespace.c
kernel/utsname.c
net/core/net_namespace.c

index 699b8c770c47dab626661f4c285074af60279f63..b9f94769ec11e12a09a773fa410971daf5225816 100644 (file)
@@ -4082,7 +4082,7 @@ static void dec_mnt_namespaces(struct ucounts *ucounts)
 static void free_mnt_ns(struct mnt_namespace *ns)
 {
        if (!is_anon_ns(ns))
-               ns_free_inum(&ns->ns);
+               ns_common_free(ns);
        dec_mnt_namespaces(ns->ucounts);
        mnt_ns_tree_remove(ns);
 }
@@ -4154,7 +4154,7 @@ struct mnt_namespace *copy_mnt_ns(unsigned long flags, struct mnt_namespace *ns,
        new = copy_tree(old, old->mnt.mnt_root, copy_flags);
        if (IS_ERR(new)) {
                namespace_unlock();
-               ns_free_inum(&new_ns->ns);
+               ns_common_free(ns);
                dec_mnt_namespaces(new_ns->ucounts);
                mnt_ns_release(new_ns);
                return ERR_CAST(new);
index 05c7a7dd211bd37f61bd05ab9b639586ee91178a..19833ac547f9af4f493885e878574f176e344203 100644 (file)
@@ -41,6 +41,7 @@ struct ns_common {
 };
 
 int __ns_common_init(struct ns_common *ns, const struct proc_ns_operations *ops, int inum);
+void __ns_common_free(struct ns_common *ns);
 
 #define to_ns_common(__ns)                              \
        _Generic((__ns),                                \
@@ -80,4 +81,6 @@ int __ns_common_init(struct ns_common *ns, const struct proc_ns_operations *ops,
 
 #define ns_common_init_inum(__ns, __ops, __inum) __ns_common_init(to_ns_common(__ns), __ops, __inum)
 
+#define ns_common_free(__ns) __ns_common_free(to_ns_common((__ns)))
+
 #endif
index 9f21670b5824bb4bda730e66c0aa62530657ca37..08016f6e0e6fb1ce71ecc4f689cd0ffe48e723fe 100644 (file)
@@ -66,8 +66,6 @@ static inline void proc_free_inum(unsigned int inum) {}
 
 #endif /* CONFIG_PROC_FS */
 
-#define ns_free_inum(ns) proc_free_inum((ns)->inum)
-
 #define get_proc_ns(inode) ((struct ns_common *)(inode)->i_private)
 
 #endif /* _LINUX_PROC_NS_H */
index 0f8bbd18a47580c3a4a50f422ac8dd2fb81a0cbf..09d261a1a2aa4fc33bab3d3de62c32c6b60336ee 100644 (file)
@@ -97,7 +97,7 @@ fail_mq:
 
 fail_put:
        put_user_ns(ns->user_ns);
-       ns_free_inum(&ns->ns);
+       ns_common_free(ns);
 fail_free:
        kfree(ns);
 fail_dec:
@@ -161,7 +161,7 @@ static void free_ipc_ns(struct ipc_namespace *ns)
 
        dec_ipc_namespaces(ns->ucounts);
        put_user_ns(ns->user_ns);
-       ns_free_inum(&ns->ns);
+       ns_common_free(ns);
        kfree(ns);
 }
 
index d928c557e28b1a7c39dbee1046768a2cf35289f9..16ead7508371095199fd5fb659746b2bcefd7f3c 100644 (file)
@@ -40,7 +40,7 @@ void free_cgroup_ns(struct cgroup_namespace *ns)
        put_css_set(ns->root_cset);
        dec_cgroup_namespaces(ns->ucounts);
        put_user_ns(ns->user_ns);
-       ns_free_inum(&ns->ns);
+       ns_common_free(ns);
        /* Concurrent nstree traversal depends on a grace period. */
        kfree_rcu(ns, ns.ns_rcu);
 }
index c3a90bb665ad671d08577b3808e1eb8d8c97b641..7c1b07e2a6c9ed1cc6a75bbdd8045511969df8fa 100644 (file)
@@ -18,3 +18,8 @@ int __ns_common_init(struct ns_common *ns, const struct proc_ns_operations *ops,
        }
        return proc_alloc_inum(&ns->inum);
 }
+
+void __ns_common_free(struct ns_common *ns)
+{
+       proc_free_inum(ns->inum);
+}
index 170757c265c299166c50728dbdf670af35e2eca3..27e2dd9ee0515cf73e6e8ba18191fbbf03ca351e 100644 (file)
@@ -127,7 +127,7 @@ static struct pid_namespace *create_pid_namespace(struct user_namespace *user_ns
        return ns;
 
 out_free_inum:
-       ns_free_inum(&ns->ns);
+       ns_common_free(ns);
 out_free_idr:
        idr_destroy(&ns->idr);
        kmem_cache_free(pid_ns_cachep, ns);
@@ -152,7 +152,7 @@ static void destroy_pid_namespace(struct pid_namespace *ns)
        ns_tree_remove(ns);
        unregister_pidns_sysctls(ns);
 
-       ns_free_inum(&ns->ns);
+       ns_common_free(ns);
 
        idr_destroy(&ns->idr);
        call_rcu(&ns->rcu, delayed_free_pidns);
index ce8e952104a7e7bd81a63d30553e6ec09e117a99..d49c73015d6ec30d9bb96daade0120658bd09597 100644 (file)
@@ -255,7 +255,7 @@ void free_time_ns(struct time_namespace *ns)
        ns_tree_remove(ns);
        dec_time_namespaces(ns->ucounts);
        put_user_ns(ns->user_ns);
-       ns_free_inum(&ns->ns);
+       ns_common_free(ns);
        __free_page(ns->vvar_page);
        /* Concurrent nstree traversal depends on a grace period. */
        kfree_rcu(ns, ns.ns_rcu);
index db9f0463219c169a973aae221ca27851750a061a..32406bcab526fa3ccc899c1e386e1f8ad657dc72 100644 (file)
@@ -165,7 +165,7 @@ fail_keyring:
 #ifdef CONFIG_PERSISTENT_KEYRINGS
        key_put(ns->persistent_keyring_register);
 #endif
-       ns_free_inum(&ns->ns);
+       ns_common_free(ns);
 fail_free:
        kmem_cache_free(user_ns_cachep, ns);
 fail_dec:
@@ -220,7 +220,7 @@ static void free_user_ns(struct work_struct *work)
 #endif
                retire_userns_sysctls(ns);
                key_free_user_ns(ns);
-               ns_free_inum(&ns->ns);
+               ns_common_free(ns);
                /* Concurrent nstree traversal depends on a grace period. */
                kfree_rcu(ns, ns.ns_rcu);
                dec_user_namespaces(ucounts);
index 399888be66bd1f749a2fb7d68077cc8f878dbc18..95d733eb2c985b4d36f71f8f2bf8b57f370c1c66 100644 (file)
@@ -98,7 +98,7 @@ void free_uts_ns(struct uts_namespace *ns)
        ns_tree_remove(ns);
        dec_uts_namespaces(ns->ucounts);
        put_user_ns(ns->user_ns);
-       ns_free_inum(&ns->ns);
+       ns_common_free(ns);
        /* Concurrent nstree traversal depends on a grace period. */
        kfree_rcu(ns, ns.ns_rcu);
 }
index e50897fba8cde163e086c07de29e76e42ff987ce..a6a3de56a81caadb23c9d1b4492ea9cc123d091a 100644 (file)
@@ -590,7 +590,7 @@ struct net *copy_net_ns(unsigned long flags,
 
        if (rv < 0) {
 put_userns:
-               ns_free_inum(&net->ns);
+               ns_common_free(net);
 #ifdef CONFIG_KEYS
                key_remove_domain(net->key_domain);
 #endif
@@ -713,7 +713,7 @@ static void cleanup_net(struct work_struct *work)
        /* Finally it is safe to free my network namespace structure */
        list_for_each_entry_safe(net, tmp, &net_exit_list, exit_list) {
                list_del_init(&net->exit_list);
-               ns_free_inum(&net->ns);
+               ns_common_free(net);
                dec_net_namespaces(net->ucounts);
 #ifdef CONFIG_KEYS
                key_remove_domain(net->key_domain);