Page MenuHomeFreeBSD

Fix sleepq_add panic happening with too wide net epoch.
ClosedPublic

Authored by melifaro on Oct 17 2020, 11:28 AM.
Tags
None
Referenced Files
Unknown Object (File)
Tue, Dec 17, 11:05 AM
Unknown Object (File)
Tue, Dec 17, 3:25 AM
Unknown Object (File)
Wed, Dec 4, 10:39 PM
Unknown Object (File)
Wed, Nov 27, 12:59 AM
Unknown Object (File)
Oct 26 2024, 5:33 PM
Unknown Object (File)
Oct 26 2024, 5:33 PM
Unknown Object (File)
Oct 26 2024, 5:33 PM
Unknown Object (File)
Oct 26 2024, 5:33 PM

Details

Summary

Fix panic described in kern/250413 introduced by D25445.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

melifaro added a reviewer: network.
melifaro added a subscriber: kib.

It seems the only solution here is taking ifnet reference. I'm not sure about PCB, probably it can not disappear here.

sys/netinet/in_mcast.c
2087 ↗(On Diff #78344)

IN_MULTI_LOCK() is sx lock, so you still can sleep while in epoch.

This revision is now accepted and ready to land.Oct 17 2020, 5:01 PM
head/sys/netinet/in_mcast.c
2085

I believe it would be not too hard to move this EXIT to before corresponding breaks inside switch. Current structure where ENTER is done inside switch, and you expect all cases escape with epoch entered, is too weird/fragile.