+++ This bug was initially created as a clone of Bug #186242 +++
It appears sockaddr_in.sin_zero is not zeroed during certain operations
returning IPv4 socket names, namely:
- getsockopt(...SO_ORIGINAL_DST...) (2.4 and 2.6)
see getorigdst() in net/ipv4/netfilter/ip_conntrack_core.c
(+ in net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c in 2.6?!)
- getsockname() and getpeername() (and accept()) (2.4 only)
see inet_getname() in net/ipv4/af_inet.c
and several unitialized bytes of kernel stack (sizeof(sin_zero) == 6 to be
precise) leak to the userspace.
A patch has been included in Marcelo's 2.4 tree:
Hi, Marcel. Since RHEL-3 was only missing the memset() in getorigdst(),
which is the 2nd patch hunk of the upstream commit, I'd guess that only
one of the two CVE names are relevant. Could you please update this bug's
subject line accordingly so that I'll know which one to list in the U8 advisory?
Thanks in advance. -ernie
A fix for this problem has just been committed to the RHEL3 U8
patch pool this evening (in kernel version 2.4.21-40.5.EL).
Adding a couple dozen bugs to CanFix list so I can complete the stupid advisory.
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.