diff options
Diffstat (limited to 'drivers/net/tun.c')
-rw-r--r-- | drivers/net/tun.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index ef3b65514976..60d0a4e60ec5 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
@@ -3102,6 +3102,7 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, | |||
3102 | 3102 | ||
3103 | tun_debug(KERN_INFO, tun, "tun_chr_ioctl cmd %u\n", cmd); | 3103 | tun_debug(KERN_INFO, tun, "tun_chr_ioctl cmd %u\n", cmd); |
3104 | 3104 | ||
3105 | net = dev_net(tun->dev); | ||
3105 | ret = 0; | 3106 | ret = 0; |
3106 | switch (cmd) { | 3107 | switch (cmd) { |
3107 | case TUNGETIFF: | 3108 | case TUNGETIFF: |
@@ -3327,6 +3328,13 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, | |||
3327 | ret = tun_net_change_carrier(tun->dev, (bool)carrier); | 3328 | ret = tun_net_change_carrier(tun->dev, (bool)carrier); |
3328 | break; | 3329 | break; |
3329 | 3330 | ||
3331 | case TUNGETDEVNETNS: | ||
3332 | ret = -EPERM; | ||
3333 | if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) | ||
3334 | goto unlock; | ||
3335 | ret = open_related_ns(&net->ns, get_net_ns); | ||
3336 | break; | ||
3337 | |||
3330 | default: | 3338 | default: |
3331 | ret = -EINVAL; | 3339 | ret = -EINVAL; |
3332 | break; | 3340 | break; |