ipv6: sr: fix TLVs not being copied using setsockopt
authorMathieu Xhonneux <m.xhonneux@gmail.com>
Wed, 10 Jan 2018 13:35:49 +0000 (13:35 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 10 Jan 2018 21:03:55 +0000 (16:03 -0500)
commitccc12b11c5332c84442ef120dcd631523be75089
treeaecd1d2d0621e3fa203ccffaa71afe42893daa08
parent862c03ee1deb7e19e0f9931682e0294ecd1fcaf9
ipv6: sr: fix TLVs not being copied using setsockopt

Function ipv6_push_rthdr4 allows to add an IPv6 Segment Routing Header
to a socket through setsockopt, but the current implementation doesn't
copy possible TLVs at the end of the SRH received from userspace.

Therefore, the execution of the following branch if (sr_has_hmac(sr_phdr))
{ ... } will never complete since the len and type fields of a possible
HMAC TLV are not copied, hence seg6_get_tlv_hmac will return an error,
and the HMAC will not be computed.

This commit adds a memcpy in case TLVs have been appended to the SRH.

Fixes: a149e7c7ce81 ("ipv6: sr: add support for SRH injection through setsockopt")
Acked-by: David Lebrun <dlebrun@google.com>
Signed-off-by: Mathieu Xhonneux <m.xhonneux@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/exthdrs.c