fix ip_input m_len assertion
Sepherosa Ziehau
sepherosa at gmail.com
Mon Oct 27 19:36:33 PDT 2008
On Tue, Oct 28, 2008 at 1:35 AM, Nicolas Thery <nthery at gmail.com> wrote:
> 2008/10/27 Sepherosa Ziehau <sepherosa at gmail.com>:
>> Hi all,
>>
>> Following patch fixes:
>> - The assertion in ip_input, should test sizeof(struct ip) instead of sizeof(ip)
>> - Make sure that ip_input's precondition meets in ip_localforward
>> - Don't allow raw ip socket to send ip packet whose header length is
>> less than the minimum
>>
>> http://leaf.dragonflybsd.org/~sephe/ip_assert.diff
>>
>> Please test/review.
>
> The diff looks fine to me (but I don't know much about networking).
>
> Out of curiosity in ip_localforward(), how can the packet be freed
> while we are trying to forward it?
>
> + /* The packet was freed; we are done */
Above comment is in following code block:
+ if (m->m_len < hlen) {
+ m = m_pullup(m, hlen);
+ if (m == NULL) {
+ /* The packet was freed; we are done */
+ return 1;
+ }
+ }
If m_pullup failed ('m' is freed), then we lost the mbuf, so we could
not return 0 to let ip_output keep going.
Best Regards,
sephe
--
Live Free or Die
More information about the Submit
mailing list