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)
commit62e697767fac598518bc687d3e0dafdd7c2f09f5
tree95b6a92c2f6f2d0fa0b6fbdef9d91483b9231a26
parent91a2559c1dc5b0f7e1256d42b1508935e8eabfbf
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