olsrd: fix stack corruption in net_output()
authorJo-Philipp Wich <jow@openwrt.org>
Fri, 22 Jun 2012 01:17:59 +0000 (03:17 +0200)
committerJo-Philipp Wich <jow@openwrt.org>
Fri, 22 Jun 2012 01:17:59 +0000 (03:17 +0200)
commitf4d250ad4fad5fcfe5b5feaac3f3e121adef3fba
treeea624574234ae4013782177ea067c2035c8302d6
parent8349a11fe2519ab63bdffec4f09b47e1207f4ff4
olsrd: fix stack corruption in net_output()

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