link_gre6: Fix for changing tclass/flowlabel
When trying to change tclass or flowlabel of a GREv6 tunnel which has
the respective value set already, the code accidentally bitwise OR'ed
the old and the new value, leading to unexpected results. Fix this by
clearing the relevant bits of flowinfo variable prior to assigning the
new value.
Fixes: af89576d7a ("iproute2: GRE over IPv6 tunnel support.")
Signed-off-by: Phil Sutter <phil@nwl.cc>
This commit is contained in:
parent
6c6bbc30f4
commit
e7fefb3214
|
|
@ -288,6 +288,7 @@ get_failed:
|
|||
else {
|
||||
if (get_u8(&uval, *argv, 16))
|
||||
invarg("invalid TClass", *argv);
|
||||
flowinfo &= ~IP6_FLOWINFO_TCLASS;
|
||||
flowinfo |= htonl((__u32)uval << 20) & IP6_FLOWINFO_TCLASS;
|
||||
flags &= ~IP6_TNL_F_USE_ORIG_TCLASS;
|
||||
}
|
||||
|
|
@ -303,6 +304,7 @@ get_failed:
|
|||
invarg("invalid Flowlabel", *argv);
|
||||
if (uval > 0xFFFFF)
|
||||
invarg("invalid Flowlabel", *argv);
|
||||
flowinfo &= ~IP6_FLOWINFO_FLOWLABEL;
|
||||
flowinfo |= htonl(uval) & IP6_FLOWINFO_FLOWLABEL;
|
||||
flags &= ~IP6_TNL_F_USE_ORIG_FLOWLABEL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue