Am 10.07.21 um 04:41 schrieb Karl Denninger: > Ok, so I have good news and bad news. > > I have the trap and it is definitely in libalias which appears to come about > as > a result of a NAT translation attempt. > > Fatal trap 18: integer divide fault while in kernel mode [...] > HouseKeeping() at HouseKeeping+0x1c/frame 0xfffffe0017b6b320
The divide by zero at one of the first instructions of HouseKeeping()
seems to be caused by this line:
/sys/netinet/libalias/alias_db.c:1753:
if (packets % packet_limit == 0) {
Seems that packet_limit can become zero, there ...
At line 1780 within that function:
if (now != LibAliasTime) {
/* retry three times a second */
packet_limit = packets / 3;
packets = 0;
LibAliasTime = now;
}
The static variable packet limit is divided by 3 without any
protection against going down to 0.
A packet_limit of zero makes no sense (besides causing a divide
by zero abort), therefore this value should probably have a lower
limit of 1.
Maybe that
packet_limit = packets / 3 + 1;
would give an acceptably close result in all cases.
Else enforce a minimum value of 1 after the division:
packet_limit = packets / 3;
if (packet_limit == 0)
packet_limit = 1;
Or just:
packet_limit = packets >= 3 ? packets / 3 : 1;
Regards, STefan
OpenPGP_signature
Description: OpenPGP digital signature
