Structures which are about to be copied to userspace shouldn't have
uninitialized fields or paddings.
memset() the whole &ip_tunnel_parm in ip_tunnel_parm_to_user() before
filling it with the kernel data. The compilers will hopefully combine
writes to it.
Fixes: 117aef12a7b1 ("ip_tunnel: use a separate struct to store tunnel params
in the kernel")
Reported-by: Dan Carpenter <[email protected]>
Closes:
https://lore.kernel.org/netdev/[email protected]
Signed-off-by: Alexander Lobakin <[email protected]>
---
net/ipv4/ip_tunnel.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
index f63b573f66dc..6ec4365cefa5 100644
--- a/net/ipv4/ip_tunnel.c
+++ b/net/ipv4/ip_tunnel.c
@@ -1034,6 +1034,8 @@ bool ip_tunnel_parm_to_user(void __user *data, struct
ip_tunnel_parm_kern *kp)
!ip_tunnel_flags_is_be16_compat(kp->o_flags))
return false;
+ memset(&p, 0, sizeof(p));
+
strscpy(p.name, kp->name);
p.link = kp->link;
p.i_flags = ip_tunnel_flags_to_be16(kp->i_flags);
--
2.44.0