[Olsr-dev] [PATCH] olsrd: fix stack corruption in net_output()
Ferry Huberts
(spam-protected)
Fri Jun 22 14:03:12 CEST 2012
thanks for committing your fix!
On 22-06-12 03:33, Jo-Philipp Wich wrote:
> The net_output() function indirectly uses the stack variables dst and dst6
> outside of the scope they're declared in, this might leads to olsr_sendto()
> being called with a corrupted destination sockaddr_in.
>
> This failure condition can be observed in the log, olsrd will continuosly
> print "sendto(v4): Invalid Argument" or a similar message. On ARM it has been
> reported to result in "Unsupported Address Family".
>
> This bug became apparant on a custon OpenWrt x86_64 uClibc target using the
> Linaro GCC 4.7-2012.04 compiler, it has been reported for an unspecified ARM
> target as well.
>
> The offending code seems to be unchanged since 2008 and it does not cause
> issues on 32bit systems and/or with older (Linaro) GCC versions, but the
> compiler used in our tests seems to perform more aggressive optimizations
> leading to a stack corruption.
> ---
> src/net_olsr.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/net_olsr.c b/src/net_olsr.c
> index 7d85f4f..66e103d 100644
> --- a/src/net_olsr.c
> +++ b/src/net_olsr.c
> @@ -336,6 +336,8 @@ net_output(struct interface *ifp)
> {
> struct sockaddr_in *sin = NULL;
> struct sockaddr_in6 *sin6 = NULL;
> + struct sockaddr_in dst;
> + struct sockaddr_in6 dst6;
> struct ptf *tmp_ptf_list;
> union olsr_packet *outmsg;
> int retval;
> @@ -354,7 +356,6 @@ net_output(struct interface *ifp)
> outmsg->v4.olsr_packlen = htons(ifp->netbuf.pending);
>
> if (olsr_cnf->ip_version == AF_INET) {
> - struct sockaddr_in dst;
> /* IP version 4 */
> sin = (struct sockaddr_in *)&ifp->int_broadaddr;
>
> @@ -365,7 +366,6 @@ net_output(struct interface *ifp)
> if (sin->sin_port == 0)
> sin->sin_port = htons(olsr_cnf->olsrport);
> } else {
> - struct sockaddr_in6 dst6;
> /* IP version 6 */
> sin6 = (struct sockaddr_in6 *)&ifp->int6_multaddr;
> /* Copy sin */
>
--
Ferry Huberts
More information about the Olsr-dev
mailing list