Fwd: [is this mbuf problem real?]
Andre Oppermann
andre at freebsd.org
Wed Feb 18 16:47:30 PST 2004
Andre Oppermann wrote:
>
> "Jacques A. Vidrine" wrote:
> >
> > Does anyone have time to investigate? I will try to get more
> > information from iDEFENSE.
>
> Looking at the code there are indeed some problems.
>
> - there seems to be no boundary on how many segments we keep in the
> tcp reassembly queue
> - there seems to be no timeout of overaged fragments (we can drop
> the segments after 1*msl because we don't have SACK and it has
> to be retransmitted anyway since not ACK'ed which happens after
> read from userland). Possibly it can be dropped earlier after
> we've got x bytes or packets of more segments since it is un-
> likely to receive the missing packet this late except for really
> massive reordering
> - this attack can be made with small packets which consume an mbuf
> cluster anyway
- it uses MALLOC() to allocate its queue entry wheras it probably
should use the zone allocator. The max limit on the zone than
directly gives us a upper limit on the number of concatenated
segments (not mbufs)
- it uses LIST_FOREACH which is pretty inefficient. NetBSD has
optimized this part quite a bit with a tail queue
> For IP packet reassembly we have global and local limits:
>
> net.inet.ip.maxfragpackets: 800
> net.inet.ip.maxfragsperpacket: 16
>
> Something like this is needed for TCP as well to cope with this kind
> of resource exhaustion attack.
>
> I can fix this stuff but I won't be able to do that in emergency mode.
> The first code can be ready after the weekend. If someone else wants
> to takle it earlier/faster tell me.
--
Andre
More information about the freebsd-net
mailing list