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