[Openib-windows] Malformed check of IP packet sizes
Tzachi Dar
tzachid at mellanox.co.il
Mon Mar 13 12:45:13 PST 2006
Hi Fab,
Although more than 99.9% of IP packets in the network have a header of
20 bytes it is possible to have packets with a bigger header. The extra
data goes to the options.
In the function __send_mgr_filter_ip if the packet is identified as a
UDP packet, there is a need to start the UDP packet after the size of
the IP header.
As a result, the code
buf_len -= sizeof(ip_hdr_t);
cl_perf_start( FilterUdp );
status = __send_mgr_filter_udp(
Should be replaced with
buf_len -= IpHeaderSize(ip_hdr_t);
cl_perf_start( FilterUdp );
status = __send_mgr_filter_udp(
Where IpHeaderSize is defined as
inline uint8_t IpHeaderSize (const ip_hdr_t * const p_ip)
{
return ((p_ip->ver_hl & 0x0f) << 2);
}
This is probably also true for other places in which sizeof(ip_hdr_t) is
used.
(Please note that before finding the size of an IP header there is a
need to check that we have at least 20 bytes of data).
More information about the ofw
mailing list