diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 126da562d3eb..c42650cf8d4d 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -397,32 +397,32 @@ static int rt6_info_hash_nhsfn(unsigned int candidate_count, { unsigned int val = fl6->flowi6_proto; - val ^= fl6->daddr.s6_addr32[0]; - val ^= fl6->daddr.s6_addr32[1]; - val ^= fl6->daddr.s6_addr32[2]; - val ^= fl6->daddr.s6_addr32[3]; + val ^= (__force u32)fl6->daddr.s6_addr32[0]; + val ^= (__force u32)fl6->daddr.s6_addr32[1]; + val ^= (__force u32)fl6->daddr.s6_addr32[2]; + val ^= (__force u32)fl6->daddr.s6_addr32[3]; - val ^= fl6->saddr.s6_addr32[0]; - val ^= fl6->saddr.s6_addr32[1]; - val ^= fl6->saddr.s6_addr32[2]; - val ^= fl6->saddr.s6_addr32[3]; + val ^= (__force u32)fl6->saddr.s6_addr32[0]; + val ^= (__force u32)fl6->saddr.s6_addr32[1]; + val ^= (__force u32)fl6->saddr.s6_addr32[2]; + val ^= (__force u32)fl6->saddr.s6_addr32[3]; /* Work only if this not encapsulated */ switch (fl6->flowi6_proto) { case IPPROTO_UDP: case IPPROTO_TCP: case IPPROTO_SCTP: - val ^= fl6->fl6_sport; - val ^= fl6->fl6_dport; + val ^= (__force u16)fl6->fl6_sport; + val ^= (__force u16)fl6->fl6_dport; break; case IPPROTO_ICMPV6: - val ^= fl6->fl6_icmp_type; - val ^= fl6->fl6_icmp_code; + val ^= (__force u16)fl6->fl6_icmp_type; + val ^= (__force u16)fl6->fl6_icmp_code; break; } /* RFC6438 recommands to use flowlabel */ - val ^= fl6->flowlabel; + val ^= (__force u32)fl6->flowlabel; /* Perhaps, we need to tune, this function? */ val = val ^ (val >> 7) ^ (val >> 12);