On Thursday, March 7, 2002, at 02:05 AM, Kshitij Gunjikar wrote:

> Hi All,
>       Hi I'm studying code for ICMP .
>
>  there is a piece of code in icmp_input which just returns when we find 
> the
> ICMP packet length lesser than allowed.
>
>       if (icmplen < ICMP_MINLEN) {
>               icmpstat.icps_tooshort++;
>               goto freeit;
>       }
>       i = hlen + min(icmplen, ICMP_ADVLENMIN);
>       if (m->m_len < i && (m = m_pullup(m, i)) == 0)  {
>               icmpstat.icps_tooshort++;
>               return;
>       }
> where #define ICMPADVELMIN (8 + sizeof(struct ip) + 8)
> and icmplen = ip->ip_len ;
>
>
> why the  return? Shouldn't there be a freeing of the msg.i.e call the
> m_freem(m) instead of return ?

If you look at the last 'if' statement, you'll notice that the call to 
m_pullup() has returned NULL, which means that the mbuf has been freed 
already (or, in any case, at this point in the code, there is no mbuf to 
free, due to the assignment).

Regards,

Justin

--
Justin C. Walker, Curmudgeon-At-Large  *
Institute for General Semantics        |   When LuteFisk is outlawed
                                        |   Only outlaws will have
                                        |       LuteFisk
*--------------------------------------*-------------------------------*


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message

Reply via email to