From 2d60d8fc309a04c092af0a5fd6274f29b10144e7 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 14 Sep 2024 14:30:57 +0000 Subject: [PATCH] Revert "sysctl: treewide: drop unused argument ctl_table_root::set_ownership(table)" This reverts commit cf3a73eeb59bbc953cdbca1ba4684fd05e370509 which is commit 520713a93d550406dae14d49cdb8778d70cecdfd upstream. It breaks the Android kernel abi and can be brought back in the future in an abi-safe way if it is really needed. Bug: 161946584 Change-Id: I53affa8f6283544467f3335459862a5a5c04e500 Signed-off-by: Greg Kroah-Hartman --- fs/proc/proc_sysctl.c | 2 +- include/linux/sysctl.h | 1 + ipc/ipc_sysctl.c | 3 ++- ipc/mq_sysctl.c | 3 ++- net/sysctl_net.c | 1 + 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index df77a7bcce49..f95e320bbd09 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c @@ -486,7 +486,7 @@ static struct inode *proc_sys_make_inode(struct super_block *sb, inode->i_uid = GLOBAL_ROOT_UID; inode->i_gid = GLOBAL_ROOT_GID; if (root->set_ownership) - root->set_ownership(head, &inode->i_uid, &inode->i_gid); + root->set_ownership(head, table, &inode->i_uid, &inode->i_gid); return inode; } diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index 9f24feb94b24..a207c7ed41bd 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h @@ -185,6 +185,7 @@ struct ctl_table_root { struct ctl_table_set default_set; struct ctl_table_set *(*lookup)(struct ctl_table_root *root); void (*set_ownership)(struct ctl_table_header *head, + struct ctl_table *table, kuid_t *uid, kgid_t *gid); int (*permissions)(struct ctl_table_header *head, struct ctl_table *table); }; diff --git a/ipc/ipc_sysctl.c b/ipc/ipc_sysctl.c index d7ca2bdae9e8..29c1d3ae2a5c 100644 --- a/ipc/ipc_sysctl.c +++ b/ipc/ipc_sysctl.c @@ -192,6 +192,7 @@ static int set_is_seen(struct ctl_table_set *set) } static void ipc_set_ownership(struct ctl_table_header *head, + struct ctl_table *table, kuid_t *uid, kgid_t *gid) { struct ipc_namespace *ns = @@ -223,7 +224,7 @@ static int ipc_permissions(struct ctl_table_header *head, struct ctl_table *tabl kuid_t ns_root_uid; kgid_t ns_root_gid; - ipc_set_ownership(head, &ns_root_uid, &ns_root_gid); + ipc_set_ownership(head, table, &ns_root_uid, &ns_root_gid); if (uid_eq(current_euid(), ns_root_uid)) mode >>= 6; diff --git a/ipc/mq_sysctl.c b/ipc/mq_sysctl.c index c960691fc24d..ce03930aced5 100644 --- a/ipc/mq_sysctl.c +++ b/ipc/mq_sysctl.c @@ -78,6 +78,7 @@ static int set_is_seen(struct ctl_table_set *set) } static void mq_set_ownership(struct ctl_table_header *head, + struct ctl_table *table, kuid_t *uid, kgid_t *gid) { struct ipc_namespace *ns = @@ -96,7 +97,7 @@ static int mq_permissions(struct ctl_table_header *head, struct ctl_table *table kuid_t ns_root_uid; kgid_t ns_root_gid; - mq_set_ownership(head, &ns_root_uid, &ns_root_gid); + mq_set_ownership(head, table, &ns_root_uid, &ns_root_gid); if (uid_eq(current_euid(), ns_root_uid)) mode >>= 6; diff --git a/net/sysctl_net.c b/net/sysctl_net.c index 2edb8040eb6c..4b45ed631eb8 100644 --- a/net/sysctl_net.c +++ b/net/sysctl_net.c @@ -54,6 +54,7 @@ static int net_ctl_permissions(struct ctl_table_header *head, } static void net_ctl_set_ownership(struct ctl_table_header *head, + struct ctl_table *table, kuid_t *uid, kgid_t *gid) { struct net *net = container_of(head->set, struct net, sysctls);