net: Fix various endianness glitches
Sparse can help us find endianness bugs, but we need to make some cleanups to be able to more easily spot real bugs. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
这个提交包含在:
@@ -258,10 +258,9 @@ static DEFINE_PER_CPU(struct rt_cache_stat, rt_cache_stat);
|
||||
(__raw_get_cpu_var(rt_cache_stat).field++)
|
||||
|
||||
static inline unsigned int rt_hash(__be32 daddr, __be32 saddr, int idx,
|
||||
int genid)
|
||||
int genid)
|
||||
{
|
||||
return jhash_3words((__force u32)(__be32)(daddr),
|
||||
(__force u32)(__be32)(saddr),
|
||||
return jhash_3words((__force u32)daddr, (__force u32)saddr,
|
||||
idx, genid)
|
||||
& rt_hash_mask;
|
||||
}
|
||||
@@ -378,12 +377,13 @@ static int rt_cache_seq_show(struct seq_file *seq, void *v)
|
||||
struct rtable *r = v;
|
||||
int len;
|
||||
|
||||
seq_printf(seq, "%s\t%08lX\t%08lX\t%8X\t%d\t%u\t%d\t"
|
||||
"%08lX\t%d\t%u\t%u\t%02X\t%d\t%1d\t%08X%n",
|
||||
seq_printf(seq, "%s\t%08X\t%08X\t%8X\t%d\t%u\t%d\t"
|
||||
"%08X\t%d\t%u\t%u\t%02X\t%d\t%1d\t%08X%n",
|
||||
r->u.dst.dev ? r->u.dst.dev->name : "*",
|
||||
(unsigned long)r->rt_dst, (unsigned long)r->rt_gateway,
|
||||
(__force u32)r->rt_dst,
|
||||
(__force u32)r->rt_gateway,
|
||||
r->rt_flags, atomic_read(&r->u.dst.__refcnt),
|
||||
r->u.dst.__use, 0, (unsigned long)r->rt_src,
|
||||
r->u.dst.__use, 0, (__force u32)r->rt_src,
|
||||
(dst_metric(&r->u.dst, RTAX_ADVMSS) ?
|
||||
(int)dst_metric(&r->u.dst, RTAX_ADVMSS) + 40 : 0),
|
||||
dst_metric(&r->u.dst, RTAX_WINDOW),
|
||||
@@ -685,18 +685,17 @@ static inline bool rt_caching(const struct net *net)
|
||||
static inline bool compare_hash_inputs(const struct flowi *fl1,
|
||||
const struct flowi *fl2)
|
||||
{
|
||||
return (__force u32)(((fl1->nl_u.ip4_u.daddr ^ fl2->nl_u.ip4_u.daddr) |
|
||||
(fl1->nl_u.ip4_u.saddr ^ fl2->nl_u.ip4_u.saddr) |
|
||||
return ((((__force u32)fl1->nl_u.ip4_u.daddr ^ (__force u32)fl2->nl_u.ip4_u.daddr) |
|
||||
((__force u32)fl1->nl_u.ip4_u.saddr ^ (__force u32)fl2->nl_u.ip4_u.saddr) |
|
||||
(fl1->iif ^ fl2->iif)) == 0);
|
||||
}
|
||||
|
||||
static inline int compare_keys(struct flowi *fl1, struct flowi *fl2)
|
||||
{
|
||||
return ((__force u32)((fl1->nl_u.ip4_u.daddr ^ fl2->nl_u.ip4_u.daddr) |
|
||||
(fl1->nl_u.ip4_u.saddr ^ fl2->nl_u.ip4_u.saddr)) |
|
||||
return (((__force u32)fl1->nl_u.ip4_u.daddr ^ (__force u32)fl2->nl_u.ip4_u.daddr) |
|
||||
((__force u32)fl1->nl_u.ip4_u.saddr ^ (__force u32)fl2->nl_u.ip4_u.saddr) |
|
||||
(fl1->mark ^ fl2->mark) |
|
||||
(*(u16 *)&fl1->nl_u.ip4_u.tos ^
|
||||
*(u16 *)&fl2->nl_u.ip4_u.tos) |
|
||||
(*(u16 *)&fl1->nl_u.ip4_u.tos ^ *(u16 *)&fl2->nl_u.ip4_u.tos) |
|
||||
(fl1->oif ^ fl2->oif) |
|
||||
(fl1->iif ^ fl2->iif)) == 0;
|
||||
}
|
||||
@@ -2319,8 +2318,8 @@ int ip_route_input(struct sk_buff *skb, __be32 daddr, __be32 saddr,
|
||||
rcu_read_lock();
|
||||
for (rth = rcu_dereference(rt_hash_table[hash].chain); rth;
|
||||
rth = rcu_dereference(rth->u.dst.rt_next)) {
|
||||
if (((rth->fl.fl4_dst ^ daddr) |
|
||||
(rth->fl.fl4_src ^ saddr) |
|
||||
if ((((__force u32)rth->fl.fl4_dst ^ (__force u32)daddr) |
|
||||
((__force u32)rth->fl.fl4_src ^ (__force u32)saddr) |
|
||||
(rth->fl.iif ^ iif) |
|
||||
rth->fl.oif |
|
||||
(rth->fl.fl4_tos ^ tos)) == 0 &&
|
||||
|
在新工单中引用
屏蔽一个用户