From owner-freebsd-amd64@FreeBSD.ORG Thu May 29 21:27:27 2014 Return-Path: Delivered-To: freebsd-amd64@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id D1090670 for ; Thu, 29 May 2014 21:27:27 +0000 (UTC) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 438D92985 for ; Thu, 29 May 2014 21:27:26 +0000 (UTC) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.14.9/8.14.9) with ESMTP id s4TLRKpl014614; Fri, 30 May 2014 00:27:20 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.8.3 kib.kiev.ua s4TLRKpl014614 Received: (from kostik@localhost) by tom.home (8.14.9/8.14.8/Submit) id s4TLRKwo014613; Fri, 30 May 2014 00:27:20 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 30 May 2014 00:27:20 +0300 From: Konstantin Belousov To: Neel Natu Subject: Re: i386 Go programs crash on amd64 Message-ID: <20140529212720.GK3991@kib.kiev.ua> References: <537FD9A2.2010607@wemm.org> <20140523233444.GH74331@kib.kiev.ua> <20140524033944.GA96083@server.rulingia.com> <20140524074101.GI74331@kib.kiev.ua> <20140526113622.GB96083@server.rulingia.com> <20140526134457.GR74331@kib.kiev.ua> <20140528225542.GA46230@server.rulingia.com> <20140529013817.GF3991@kib.kiev.ua> <20140529104458.GA61598@server.rulingia.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="Swj79WlilW4BQYVz" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on tom.home Cc: freebsd-amd64@freebsd.org X-BeenThere: freebsd-amd64@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Porting FreeBSD to the AMD64 platform List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 29 May 2014 21:27:28 -0000 --Swj79WlilW4BQYVz Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, May 29, 2014 at 02:19:06PM -0700, Neel Natu wrote: > Hi, >=20 > On Thu, May 29, 2014 at 3:44 AM, Peter Jeremy wrote: > > On 2014-May-29 04:38:18 +0300, Konstantin Belousov wrote: > >>Hm, I think I know what is going on. Try this, please. > >>At least, your test binary worked for me. > > > > Thank you. That seems to fix the problem even on non-trivial code. > > >=20 > Occasionally, I run into a problem where sys arch(I386_SET_LDT) fails > with a ENOSPC. The golang runtime isn't checking the error return > correctly and proceeds to load the bogus selector value into %gs. >=20 > ./write > pid 2571 comm write: signal 10 err e4 code 3 type 9 addr 0x8062446 rsp > 0xffffdae8 rip 0x8062446 <8e e8 83 c4 20 c3 00 00> > Bus error (core dumped) >=20 > Here is the output of kdump: > $ kdump > capability mode sandbox enabled > 1934 ktrace RET ktrace 0 > 1934 ktrace CALL execve(0x7fffffffed2f,0x7fffffffeae0,0x7fffffffeaf0) > 1934 ktrace NAMI "./write" > 1934 write RET execve 0 > 1934 write CALL sysarch(0x1,0xffffdb38) > 1934 write RET sysarch -1 errno 28 No space left on device > 1934 write PSIG SIGBUS SIG_DFL code=3DBUS_OBJERR > 1934 write NAMI "write.core" >=20 > In any case this is a problem because we aren't zeroing the LDT after > allocation. Here is a patch that fixes it: >=20 > Index: sys/amd64/amd64/sys_machdep.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- sys/amd64/amd64/sys_machdep.c (revision 266856) > +++ sys/amd64/amd64/sys_machdep.c (working copy) > @@ -462,7 +462,7 @@ > new_ldt =3D malloc(sizeof(struct proc_ldt), M_SUBPROC, M_WAITOK); > new_ldt->ldt_base =3D (caddr_t)kmem_malloc(kernel_arena, > max_ldt_segment * sizeof(struct user_segment_descriptor), > - M_WAITOK); > + M_WAITOK | M_ZERO); > if (new_ldt->ldt_base =3D=3D NULL) { > FREE(new_ldt, M_SUBPROC); > mtx_lock(&dt_lock); >=20 > Ok to commit? Sure, this also should be merged back to at least stable/8. --Swj79WlilW4BQYVz Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (FreeBSD) iQIbBAEBAgAGBQJTh6Y4AAoJEJDCuSvBvK1BN0oP9Ay+U5nlUA87WHryQVXjuhIp c1fZta8FbXjidOcJPFi8wa/flTgyRwROBOaXp531P6czwT8jwK5/kMxlRqYIGhrb TNQIoCWKYk4car24uhsFnxPCQdHlzNdGmvhyvDqUCVGo8k/Tn7mzGPb3Q6oM9LL+ oteFaAyziQS3SYNA4mlEO1sFzkuQvV99bg41gDvJHoXemIsekz06ud2Mbitkhwl8 vXUKvvh0HVhK4bfcD0RCc5+fFVx2DXJdjfYdESpTAr1o1+L478rqiKMRQHNICsp6 sl2Up/tJq8c4BE/HmzY8HTidvH9lx8Pmj86W1m2HNx+vsoPKmlMAJQumUVy5kH2N iSRJvioONCUXwAW2y5KVcR7QzpFhpULA8GO/W8OB8lqbAoCyLkp8lvV0l3Jt3ZrU HvRZObvk0dyAW1UuDi+CQFVHpgegG7vvxU1rc+H78z6BavONA11vAH67yG/iLT8q yimiEZaJGzIVw/XQ4keIfYlI0KUnepMmVxJPtoOEQr2prU7kSt6XomheeZnyQ8gO pefWan4+Q/Ne5XZ1Y0aHbsueQi/sq2soV3SDHqK0cBPKnF4HcJS4gZyhLCJ0KqbZ Nq+o3SHioJOw1iUsnN6jgZRKNcZgKdJxrLPL8MD3E1SCqQ3dxAfKXAd5Ec48lSID oAxVdFz2NqCBhdEiOrQ= =lagm -----END PGP SIGNATURE----- --Swj79WlilW4BQYVz--