Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Jul 2007 23:06:10 +0200
From:      Ed Schouten <ed@fxq.nl>
To:        Michiel Boland <michiel@boland.org>
Cc:        FreeBSD Current <freebsd-current@freebsd.org>
Subject:   Re: sshd broken with UsePrivilegeSeparation=yes on sparc64
Message-ID:  <20070715210610.GA39075@hoeg.nl>
In-Reply-To: <Pine.GSO.4.64.0707151732540.129@neerbosch.nijmegen.internl.net>
References:  <Pine.GSO.4.64.0707102349300.24847@neerbosch.nijmegen.internl.net> <Pine.GSO.4.64.0707151732540.129@neerbosch.nijmegen.internl.net>

next in thread | previous in thread | raw e-mail | index | archive | help

--xHFwDpU9dbj6ez1V
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

* Michiel Boland <michiel@boland.org> wrote:
> It looks like gcc mis-compiles /usr/src/crypto/openssh/monitor_fdpass.c o=
n=20
> sparc64. For some reason it optimizes away the assignment of fd on line=
=20
> 132:
>
>         fd =3D (*(int *)CMSG_DATA(cmsg));
>
> So I guess that every call to mm_receive_fd will return an undefined valu=
e.
>
> If I add -O0 to CFLAGS in /usr/src/secure/lib/libssh/Makefile, ssh with=
=20
> UsePrivilegeSeparation=3Dyes works again.
>
> So, obviously a gcc bug. I will try to generate a smaller test-case for=
=20
> this.

I've attached an email from Steve Kargl, which is about similar breakage
in msun some months ago, right after the gcc 4.2 import:

----- Forwarded message from Steve Kargl <sgk@troutmask.apl.washington.edu>=
 -----
> Date: Sun, 27 May 2007 12:39:29 -0700
> From: Steve Kargl <sgk@troutmask.apl.washington.edu>
> To: Kris Kennaway <kris@obsecurity.org>
> Cc: freebsd-current@freebsd.org, Ed Schouten <ed@fxq.nl>,
> 	Stefan Ehmann <shoesoft@gmx.net>
> Subject: Re: HEADS-UP: gcc-4.2 import appears to miscompile libm.
>=20
> On Sun, May 27, 2007 at 03:28:25PM -0400, Kris Kennaway wrote:
> > On Sun, May 27, 2007 at 08:18:40AM -0700, Steve Kargl wrote:
> >> On Sun, May 27, 2007 at 10:53:09AM +0200, Stefan Ehmann wrote:
> >>> On Sunday 27 May 2007 01:31:16 Steve Kargl wrote:
> >>>> On Sat, May 26, 2007 at 07:09:16PM -0400, Wes Morgan wrote:
> >>>>> Working from -O towards -O2 based on the info pages, I can "reprodu=
ce"
> >>>>> the problem with "-O -fstrict-aliasing -fgcse"... However, -O2 with
> >>>>> -fno-strict-aliasing by itself seems to work around the issue. At f=
irst
> >>>>> glance it looks like a possible interaction between several
> >>>>> optimizations.
> >>>>
> >>>> Ths patch fixes the problem.
> >>>>
> >>>> --- s_frexpf.c.orig     Sat May 26 16:26:50 2007
> >>>> +++ s_frexpf.c  Sat May 26 16:28:03 2007
> >>>> @@ -39,6 +39,9 @@
> >>>>         }
> >>>>         *eptr +=3D (ix>>23)-126;
> >>>>         hx =3D (hx&0x807fffff)|0x3f000000;
> >>>> +#if 0
> >>>>         *(int*)&x =3D hx;
> >>>> +#endif
> >>>> +       SET_FLOAT_WORD(x,hx);
> >>>>         return x;
> >>>>  }
> >>>=20
> >>> -fno-strict-aliasing is used by default for me (i386). Also, if you u=
se -Wall=20
> >>> the compiler outputs a warning.
> >>=20
> >> You apparently don't have CFLAGS set in /etc/make.conf.
> >>=20
> >>> [root@something /usr/src/lib/msun/src]# cc -O2 -Wall -pipe  -c s_frex=
pf.c
> >>> s_frexpf.c: In function 'frexpf':
> >>> s_frexpf.c:42: warning: dereferencing type-punned pointer will break=
=20
> >>> strict-aliasing rules
> >>=20
> >> Yes, I know.
> >>=20
> >> OTOH, the above patch actually fixes the problem, and libm can then
> >> be compiled without -fno-strict-aliasing.
> >=20
> > OK, so just to confirm, it's not a miscompilation as originally
> > suggested, but a code bug?
> >=20
>=20
> Yes, it is a code bug.  It is my understanding that C (C99?)=20
> considers "*(int*)&x =3D hx;" to be undefined behavior.  From
> what I've gleaned from the gcc IRC channel, gcc-4.2 now does
> a "load and store" instead of a "store and load"  (or vice versa).
>=20
> Of course, the patch touches libm so be prepared to be brucified.
>=20
> --=20
> Steve
>=20
----- End forwarded message -----

I'm not sure whether it is related at all; it looks quite similar,
because of the pointer casting + dereferencing.

--=20
 Ed Schouten <ed@fxq.nl>
 WWW: http://g-rave.nl/

--xHFwDpU9dbj6ez1V
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)

iD8DBQFGmoxC52SDGA2eCwURAqRAAJ9mn8C4T5u0FPtCfLTRg7AuKUZ2WACeMyF2
MiDkXwkgR2mAe5D1aKIIBig=
=M/pj
-----END PGP SIGNATURE-----

--xHFwDpU9dbj6ez1V--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070715210610.GA39075>