Thank you Fujimoto-san 

/Shivaram
::Sent from my mobile device::

> On Aug 1, 2017, at 9:39 PM, Fujimoto Satoshi <satoshi.fujimo...@gmail.com> 
> wrote:
> 
> Hi, Shivaram
> 
> Oops, I overlooked about it.
> 
> It is needed for not only avoiding infinite loop, but also complying RFC.
> For the 'length' field in options, RFC4861 says that:
> 
>     The value 0 is invalid.  Nodes MUST
>     silently discard an ND packet that contains an
>     option with length zero.
> 
> So we should raise an exception when receiving such invalid packets.
> I will make a patch.
> 
> Thanks,
> Fujimoto
> 
>> On 2017年08月02日 12:13, Shivaram Mysore wrote:
>> Hello,
>> 
>> The patch from Bill was suggesting something like this:
>> 
>>              if cls_ is not None:
>>                  option = cls_.parser(buf, offset)
>>              else:
>> -                option = buf[offset:offset + (length * 8 - 2)]
>> +                assert length > 0   # avoid infinite loop when length=0
>> +                option = buf[offset:offset + (length * 8)]
>>              options.append(option)
>>              offset += len(option)
>>          msg = cls(ch_l, res >> 6, rou_l, rea_t, ret_t, options)
>> 
>> 
>> Would it be good to check for length too?
>> 
>> Thanks
>> 
>> /Shivaram
>> 
>>> On Tue, Aug 1, 2017 at 7:18 PM, Satoshi Fujimoto 
>>> <satoshi.fujimo...@gmail.com> wrote:
>>> The length of nd_option is units of 8 octets.
>>> Currently, for nd_options which is undefined in the ICMPv6 packet library,
>>> the parser assumes that the length is [8 * length - 2].
>>> It causes fails while parsing these options.
>>> 
>>> This patch fixes it to parse such options correctly.
>>> 
>>> Signed-off-by: Satoshi Fujimoto <satoshi.fujimo...@gmail.com>
>>> ---
>>>  ryu/lib/packet/icmpv6.py | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>> 
>>> diff --git a/ryu/lib/packet/icmpv6.py b/ryu/lib/packet/icmpv6.py
>>> index 1e5eaea..7608169 100644
>>> --- a/ryu/lib/packet/icmpv6.py
>>> +++ b/ryu/lib/packet/icmpv6.py
>>> @@ -363,7 +363,7 @@ class nd_router_advert(stringify.StringifyMixin):
>>>              if cls_ is not None:
>>>                  option = cls_.parser(buf, offset)
>>>              else:
>>> -                option = buf[offset:offset + (length * 8 - 2)]
>>> +                option = buf[offset:offset + (length * 8)]
>>>              options.append(option)
>>>              offset += len(option)
>>>          msg = cls(ch_l, res >> 6, rou_l, rea_t, ret_t, options)
>>> --
>>> 2.7.4
>>> 
>>> 
>>> ------------------------------------------------------------------------------
>>> Check out the vibrant tech community on one of the world's most
>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>>> _______________________________________________
>>> Ryu-devel mailing list
>>> Ryu-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>> 
> 
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to