]> git.baikalelectronics.ru Git - kernel.git/commit
ipv6: rpl: fix full address compression
authorAlexander Aring <alex.aring@gmail.com>
Wed, 15 Apr 2020 13:06:53 +0000 (09:06 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sat, 18 Apr 2020 22:04:27 +0000 (15:04 -0700)
commit58ca5362a68bec36358d49a4d6eeb1ac4def7919
tree95b6a92c2f6f2d0fa0b6fbdef9d91483b9231a26
parenta7d9e591b43a7fc8d3096853cbce50e083925b6d
ipv6: rpl: fix full address compression

This patch makes it impossible that cmpri or cmpre values are set to the
value 16 which is not possible, because these are 4 bit values. We
currently run in an overflow when assigning the value 16 to it.

According to the standard a value of 16 can be interpreted as a full
elided address which isn't possible to set as compression value. A reason
why this cannot be set is that the current ipv6 header destination address
should never show up inside the segments of the rpl header. In this case we
run in a overflow and the address will have no compression at all. Means
cmpri or compre is set to 0.

As we handle cmpri and cmpre sometimes as unsigned char or 4 bit value
inside the rpl header the current behaviour ends in an invalid header
format. This patch simple use the best compression method if we ever run
into the case that the destination address is showed up inside the rpl
segments. We avoid the overflow handling and the rpl header is still valid,
even when we have the destination address inside the rpl segments.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/rpl.c