Date: Thu, 26 Dec 2013 16:05:00 +0200 From: Konstantin Belousov <kostikbel@gmail.com> To: Andriy Gapon <avg@FreeBSD.org> Cc: Alan Cox <alc@FreeBSD.org>, FreeBSD Current <freebsd-current@FreeBSD.org>, peter@freebsd.org, Marcel Moolenaar <marcel@FreeBSD.org>, freebsd-java@FreeBSD.org Subject: Re: latest openjdk7 triggers kernel panic Message-ID: <20131226140500.GM59496@kib.kiev.ua> In-Reply-To: <52BC1B41.2060900@FreeBSD.org> References: <52BC1B41.2060900@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--dtz4emBHhXMjtfBB Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Dec 26, 2013 at 02:04:17PM +0200, Andriy Gapon wrote: >=20 > I am running FreeBSD based on the head from a few weeks ago, amd64. >=20 > It seems that after a recent upgrade of openjdk7 I consistently get a ker= nel > panic when a java process starts: >=20 > panic: Bad entry start/end for new stack entry > KDB: stack backtrace: > db_trace_self_wrapper() at 0xffffffff803adc9b =3D db_trace_self_wrapper+0= x2b/frame > 0xfffffe02ba6fe6e0 > kdb_backtrace() at 0xffffffff805cbd79 =3D kdb_backtrace+0x39/frame 0xffff= fe02ba6fe790 > panic() at 0xffffffff80597733 =3D panic+0x1a3/frame 0xfffffe02ba6fe810 > vm_map_stack() at 0xffffffff80719f2e =3D vm_map_stack+0x3ce/frame 0xfffff= e02ba6fe8a0 > vm_mmap() at 0xffffffff8071c270 =3D vm_mmap+0x520/frame 0xfffffe02ba6fea30 > sys_mmap() at 0xffffffff8071bad3 =3D sys_mmap+0x303/frame 0xfffffe02ba6fe= af0 > amd64_syscall() at 0xffffffff8074d0c8 =3D amd64_syscall+0x238/frame 0xfff= ffe02ba6febf0 > Xfast_syscall() at 0xffffffff80733e2b =3D Xfast_syscall+0xfb/frame 0xffff= fe02ba6febf0 >=20 > Specifically, new_entry->end !=3D top condition is true. > new_entry->end is consistently greater than top by 3 pages. >=20 > I suspect that java now does some hacky things with its stack and I suspe= ct that > vm_map_simplify_entry() call at the end of vm_map_insert() could be to bl= ame. > Although, the call is guarded by a check: >=20 > 1290 /* > 1291 * It may be possible to merge the new entry with the next a= nd/or > 1292 * previous entries. However, due to MAP_STACK_* being a ha= ck, a > 1293 * panic can result from merging such entries. > 1294 */ > 1295 if ((cow & (MAP_STACK_GROWS_DOWN | MAP_STACK_GROWS_UP)) =3D= =3D 0) > 1296 vm_map_simplify_entry(map, new_entry); >=20 > But that check seems to be defeated by the fact that vm_map_stack() clear= s our > the relevant bits after saving them locally: >=20 > 3335 /* > 3336 * The stack orientation is piggybacked with the cow argumen= t. > 3337 * Extract it into orient and mask the cow argument so that = we > 3338 * don't pass it around further. > 3339 * NOTE: We explicitly allow bi-directional stacks. > 3340 */ > 3341 orient =3D cow & (MAP_STACK_GROWS_DOWN|MAP_STACK_GROWS_UP); > 3342 cow &=3D ~orient; >=20 I provided the following patch yesterday to Peter, after the similar mail. diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index e3842a3..51b60de 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -1207,6 +1207,7 @@ charged: } else if ((prev_entry !=3D &map->header) && (prev_entry->eflags =3D=3D protoeflags) && + (cow & (MAP_ENTRY_GROWS_DOWN | MAP_ENTRY_GROWS_UP)) =3D=3D 0 && (prev_entry->end =3D=3D start) && (prev_entry->wired_count =3D=3D 0) && (prev_entry->cred =3D=3D cred || But there were no core dump available, and I think that your note is also valid. I do not see why cow should be cleared from the stack direction bits. diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index e3842a3..e15e0ca 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -3339,7 +3340,6 @@ vm_map_stack(vm_map_t map, vm_offset_t addrbos, vm_si= ze_t max_ssize, * NOTE: We explicitly allow bi-directional stacks. */ orient =3D cow & (MAP_STACK_GROWS_DOWN|MAP_STACK_GROWS_UP); - cow &=3D ~orient; KASSERT(orient !=3D 0, ("No stack grow direction")); =20 if (addrbos < vm_map_min(map) || --dtz4emBHhXMjtfBB Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (FreeBSD) iQIcBAEBAgAGBQJSvDeLAAoJEJDCuSvBvK1BmzMP/idHmUFvFRWBzAfi21cDWRSm pD2en4U0dGNCfky8MOCCLQr4bUVvRU64Nbowy/xtwMkoNMPuuTcBEvRT218J5+de RPs3ekx2Ug/Lhc3KhH2gOF6hJKRMqOWZRuSNISZlJMo9j6X/QPPv2SEmw7GPFnTI yad5u8wbkpg7pUciAENA58ibZrNtOB3WgTZTAPqcHjD5QJbp7j3EtsXOTCcYs4d9 AxPKGjbgbZsYjbZFiTH+A4dMOuIHXyi6rQ1A+XuBS0DaBCaQlsKAp91NqGpX7K/+ NAb6Z3a0E00V2yEXIPeNvKInYQUOBcyEIEJVtJSc9NiMW4e4TXQOWV7Z9vNGnpnP 61DMNPelaHz73RI2KS5MziQ+3l+q/Y6SschdyI2MtbV9sb+bGYoWQVsF0+V+4VUe CX5jQhoQ+h1HtjJj1+SH0yg3OcWQOc03b6N17uBU2daFuz8hP/MF+X1s+PH0Cd8k s9d59HOd6/Et7OTpzKB+IM5CfzwDm25eCkgu3vYTRlT8M2wsY6KrjMWdbiKOwe0k vSPLBUrt9XNU8Bc9q1yLK/Q9CwomNYHK+eM007i3ojGYZiqWRUb4u7d5BfcNVVuf S+XtQv7Zd/dmLiZEeVthZDbYHmz+gnes84DHLvMKt33eo9/84g+pER3HHjUo2aHR Bi2kLxBcL5Jyn98r0zYt =YDEG -----END PGP SIGNATURE----- --dtz4emBHhXMjtfBB--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20131226140500.GM59496>