Message ID | 20240404160302.3585661-1-aleksander.lobakin@intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 5a66cda52d7daccc88aa358872816c35093759f9 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] ip_tunnel: harden copying IP tunnel params to userspace | expand |
On Thu, Apr 04, 2024 at 06:03:02PM +0200, Alexander Lobakin wrote: > 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 <dan.carpenter@linaro.org> > Closes: https://lore.kernel.org/netdev/5f63dd25-de94-4ca3-84e6-14095953db13@moroto.mountain > Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com> Reviewed-by: Simon Horman <horms@kernel.org>
Hello: This patch was applied to netdev/net-next.git (main) by David S. Miller <davem@davemloft.net>: On Thu, 4 Apr 2024 18:03:02 +0200 you wrote: > 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 <dan.carpenter@linaro.org> > Closes: https://lore.kernel.org/netdev/5f63dd25-de94-4ca3-84e6-14095953db13@moroto.mountain > Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com> > > [...] Here is the summary with links: - [net-next] ip_tunnel: harden copying IP tunnel params to userspace https://git.kernel.org/netdev/net-next/c/5a66cda52d7d You are awesome, thank you!
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);
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 <dan.carpenter@linaro.org> Closes: https://lore.kernel.org/netdev/5f63dd25-de94-4ca3-84e6-14095953db13@moroto.mountain Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com> --- net/ipv4/ip_tunnel.c | 2 ++ 1 file changed, 2 insertions(+)