Date: Tue, 18 Dec 2007 11:43:02 +0300 From: "Yuriy Tsibizov" <Yuriy.Tsibizov@gfk.com> To: <freebsd-current@freebsd.org> Cc: ume@freebsd.org Subject: RE: story about lost %ebx (stack corruption in inet_aton ?) Message-ID: <78664C02FF341B4FAC63E561846E3BCC0EEA57@ex.hhp.local> In-Reply-To: <78664C02FF341B4FAC63E561846E3BCC0EEA56@ex.hhp.local> References: <78664C02FF341B4FAC63E561846E3BCC0EEA52@ex.hhp.local> <78664C02FF341B4FAC63E561846E3BCC0EEA56@ex.hhp.local>
next in thread | previous in thread | raw e-mail | index | archive | help
> > My first impression was that there is a bug in gcc compiler=20
> on 7-BETA
> > and 8-CURRENT (i386 only, and only if optimization is=20
> enabled), but it
> > seems to be incorrect. Most probably source is stack corruption in
> > inet_aton()
>=20
> mistyped, it is inet_network() that fails...
>=20
> testcase:
>=20
> #include <sys/cdefs.h>
> #include <sys/types.h>
> #include <netinet/in.h>
> #include <arpa/inet.h>
> #include <ctype.h>
>=20
> int main(){
> int val;
> char s[]=3D"10.10.0.10.0/12"; // four dots here!
> char *q;
>=20
> q =3D strchr(s,'/');
> if (q) {
> *q =3D '\0';
> if ((val =3D inet_network(s)) !=3D INADDR_NONE) {
> printf("OK\n");
> return (0);
> }
> printf("q=3D %08x\n", q);
> *q =3D '/';
> }
> }
>=20
>=20
> (should be built with -O1 or -O2 to expose that bug)
patch is simple:
-------------
--- inet_network.c.orig 2007-06-03 21:20:26.000000000 +0400
+++ inet_network.c 2007-12-18 11:11:33.000000000 +0300
@@ -53,7 +53,7 @@
{
in_addr_t val, base, n;
char c;
- in_addr_t parts[4], *pp =3D parts;
+ in_addr_t parts[5], *pp =3D parts;
int i, digit;
=20
again:
-------------
Yuriy.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?78664C02FF341B4FAC63E561846E3BCC0EEA57>
