| From 1e1504a8eb4c6ac52ab146e36fb471d31308e60e Mon Sep 17 00:00:00 2001 |
| From: Mathias Krause <minipli@googlemail.com> |
| Date: Sun, 29 Jul 2012 19:45:14 +0000 |
| Subject: [PATCH] net/tun: fix ioctl() based info leaks |
| |
| commit a117dacde0288f3ec60b6e5bcedae8fa37ee0dfc upstream. |
| |
| The tun module leaks up to 36 bytes of memory by not fully initializing |
| a structure located on the stack that gets copied to user memory by the |
| TUNGETIFF and SIOCGIFHWADDR ioctl()s. |
| |
| Signed-off-by: Mathias Krause <minipli@googlemail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| drivers/net/tun.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/tun.c b/drivers/net/tun.c |
| index 7b4a88b2f696..c777d8ebdaa8 100644 |
| --- a/drivers/net/tun.c |
| +++ b/drivers/net/tun.c |
| @@ -1177,9 +1177,11 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, |
| int sndbuf; |
| int ret; |
| |
| - if (cmd == TUNSETIFF || _IOC_TYPE(cmd) == 0x89) |
| + if (cmd == TUNSETIFF || _IOC_TYPE(cmd) == 0x89) { |
| if (copy_from_user(&ifr, argp, ifreq_len)) |
| return -EFAULT; |
| + } else |
| + memset(&ifr, 0, sizeof(ifr)); |
| |
| if (cmd == TUNGETFEATURES) { |
| /* Currently this just means: "what IFF flags are valid?". |
| -- |
| 1.8.5.2 |
| |