aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2013-03-25 23:07:01 -0400
committerEric W. Biederman <ebiederm@xmission.com>2013-08-29 00:35:14 -0400
commit7dc5dbc879bd0779924b5132a48b731a0bc04a1e (patch)
treebcae7323006aa19fc91c27fdb156667c9a061809 /net
parente51db73532955dc5eaba4235e62b74b460709d5b (diff)
sysfs: Restrict mounting sysfs
Don't allow mounting sysfs unless the caller has CAP_SYS_ADMIN rights over the net namespace. The principle here is if you create or have capabilities over it you can mount it, otherwise you get to live with what other people have mounted. Instead of testing this with a straight forward ns_capable call, perform this check the long and torturous way with kobject helpers, this keeps direct knowledge of namespaces out of sysfs, and preserves the existing sysfs abstractions. Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'net')
-rw-r--r--net/core/net-sysfs.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 981fed397d1d..9bd9ae16adf5 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -1157,6 +1157,13 @@ static void remove_queue_kobjects(struct net_device *net)
1157#endif 1157#endif
1158} 1158}
1159 1159
1160static bool net_current_may_mount(void)
1161{
1162 struct net *net = current->nsproxy->net_ns;
1163
1164 return ns_capable(net->user_ns, CAP_SYS_ADMIN);
1165}
1166
1160static void *net_grab_current_ns(void) 1167static void *net_grab_current_ns(void)
1161{ 1168{
1162 struct net *ns = current->nsproxy->net_ns; 1169 struct net *ns = current->nsproxy->net_ns;
@@ -1179,6 +1186,7 @@ static const void *net_netlink_ns(struct sock *sk)
1179 1186
1180struct kobj_ns_type_operations net_ns_type_operations = { 1187struct kobj_ns_type_operations net_ns_type_operations = {
1181 .type = KOBJ_NS_TYPE_NET, 1188 .type = KOBJ_NS_TYPE_NET,
1189 .current_may_mount = net_current_may_mount,
1182 .grab_current_ns = net_grab_current_ns, 1190 .grab_current_ns = net_grab_current_ns,
1183 .netlink_ns = net_netlink_ns, 1191 .netlink_ns = net_netlink_ns,
1184 .initial_ns = net_initial_ns, 1192 .initial_ns = net_initial_ns,