]> 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)
commit08e734518d581b5b4f9b73a32adf7f15160a856b
tree95b6a92c2f6f2d0fa0b6fbdef9d91483b9231a26
parenta184fea49f13869d7cb454fc532a578e0a72ece2
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