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)
Sat, Oct 26, 5:33 PM
Unknown Object (File)
Sat, Oct 26, 5:33 PM
Unknown Object (File)
Sat, Oct 26, 5:33 PM
Unknown Object (File)
Sat, Oct 26, 5:33 PM
Unknown Object (File)
Sat, Oct 26, 5:13 PM
Unknown Object (File)
Oct 11 2024, 3:14 PM
Unknown Object (File)
Oct 2 2024, 4:10 PM
Unknown Object (File)
Oct 2 2024, 5:00 AM

Details

Summary

Fix panic described in kern/250413 introduced by D25445.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 34226
Build 31371: arc lint + arc unit

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

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 ↗(On Diff #78366)

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.