Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Apr 2017 14:08:20 +0200
From:      peter.blok@bsd4all.org
To:        Marko Zec <zec@fer.hr>
Cc:        freebsd-net@freebsd.org
Subject:   Re: MFC VIMAGE fixes to 11-stable
Message-ID:  <0E874FFD-735D-443C-A92E-F00E3737441C@bsd4all.org>
In-Reply-To: <20170420124256.1190665d@x23>
References:  <8E6FC1CD-24D5-46D5-A6A1-760DD612F92D@bsd4all.org> <20170420124256.1190665d@x23>

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

Thanks for the pointer. It was not my intention to have this committed, =
but it helped identify other problems. I have asked this before in =
-current, but got no answer so I posted it here to get an answer.

If you look inside slab_free_item there is a KASSERT for just this, so =
that=E2=80=99s why I tried it.

I have added debug information to print the zone=E2=80=99s and the =
keg=E2=80=99s and It all looked good. I was not able to find any place =
where we operated on the wrong context, but perhaps I missed one.

I=E2=80=99ll dig further.

Peter


> On 20 Apr 2017, at 12:42, Marko Zec <zec@fer.hr> wrote:
>=20
> On Wed, 19 Apr 2017 21:31:50 +0200
> <peter.blok@bsd4all.org> wrote:
> ...
>> I also have a change in zone_release to fix another panic and leak in
>> slab_free_item. The issue is that zone_release tries to release a keg
>> that never belonged to the zone it is trying to release. With my
>> limited knowledge, i think that should not happen.
>>=20
>> --- vm/uma_core.c	(revision 317156)
>> +++ vm/uma_core.c	(working copy)
>> @@ -2846,7 +2846,8 @@
>> 				KEG_LOCK(keg);
>> 			}
>> 		}
>> -		slab_free_item(keg, slab, item);
>> +		if (keg =3D=3D slab->us_keg)
>> +			slab_free_item(keg, slab, item);
>> 		if (keg->uk_flags & UMA_ZFLAG_FULL) {
>> 			if (keg->uk_pages < keg->uk_maxpages) {
>> 				keg->uk_flags &=3D ~UMA_ZFLAG_FULL;
>>=20
>=20
> This change only masks the cause of the panic while still continuing =
to
> leak memory, and should never be commited.
>=20
> The real culprit lies somewhere in PF code which operates on a wrong
> vnet.  Without a backtrace it's difficult to guess, but a quick read
> reveals that
>=20
> pfi_initialize()
>=20
> is called from the default vnet context, and subsequently registers
> interface eventhandlers so that all interface attach, change and =
detach
> events will be always executed in the default vnet, regardless of the
> real vnet where the interfaces bound to the events actually reside.  =
In
> other words,
>=20
> pfi_attach_group_event()
> pfi_change_group_event()
> pfi_detach_group_event()
>=20
> will operate fine only in the default vnet, but will wreak havoc
> otherwise.  Hence, those handlers should be fixed first.
>=20
> Marko
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0E874FFD-735D-443C-A92E-F00E3737441C>