The tun module leaks up to 36 bytes of memory by not 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 <redacted>
---
drivers/net/tun.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
@@ -1252,9 +1252,12 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,intvnet_hdr_sz;intret;-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?".
From: richard -rw- weinberger <hidden> Date: 2012-07-29 23:11:29
On Sun, Jul 29, 2012 at 10:58 PM, Mathias Krause [off-list ref] wrote:
quoted hunk
The tun module leaks up to 36 bytes of memory by not 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 <redacted>
---
drivers/net/tun.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
@@ -1252,9 +1252,12 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,intvnet_hdr_sz;intret;-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?".
The fix makes sense to me.
Beside of the fix, why are you adding braces to if and else?
We don't use braces on single statements.
--
Thanks,
//richard
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 <redacted>
---
v2:
- removed braces around else branch
- minor adjustment of the commit message
drivers/net/tun.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
@@ -1252,9 +1252,11 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,intvnet_hdr_sz;intret;-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?".
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 <redacted>
From: Eric Dumazet <hidden> Date: 2012-07-30 06:22:26
On Mon, 2012-07-30 at 07:45 +0200, Mathias Krause wrote:
quoted hunk
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 <redacted>
---
v2:
- removed braces around else branch
- minor adjustment of the commit message
drivers/net/tun.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
@@ -1252,9 +1252,11 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,intvnet_hdr_sz;intret;-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?".
Actually braces were better
vi +169 Documentation/CodingStyle
This does not apply if only one branch of a conditional statement is a
single
statement; in the latter case use braces in both branches:
if (condition) {
do_this();
do_that();
} else {
otherwise();
}
On Mon, 2012-07-30 at 07:45 +0200, Mathias Krause wrote:
quoted
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 <redacted>
---
v2:
- removed braces around else branch
- minor adjustment of the commit message
drivers/net/tun.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
@@ -1252,9 +1252,11 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,intvnet_hdr_sz;intret;-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?".
Actually braces were better
vi +169 Documentation/CodingStyle
This does not apply if only one branch of a conditional statement is a
single
statement; in the latter case use braces in both branches:
if (condition) {
do_this();
do_that();
} else {
otherwise();
}