mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
ipv4: Avoid use of signed integers in fib_trie code.
GCC emits all kinds of crazy zero extensions when we go from signed int, to unsigned short, etc. etc. This transformation has to be legal because: 1) In tkey_extract_bits() in mask_pfx(), the values are used to perform shifts, on which negative values are undefined by C. 2) In fib_table_lookup() we perform comparisons with unsigned values, constants, and additions. None of which should encounter negative values. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3c7bd1a140
commit
3b004569d8
1 changed files with 5 additions and 5 deletions
|
@ -217,12 +217,12 @@ static inline int tnode_child_length(const struct tnode *tn)
|
|||
return 1 << tn->bits;
|
||||
}
|
||||
|
||||
static inline t_key mask_pfx(t_key k, unsigned short l)
|
||||
static inline t_key mask_pfx(t_key k, unsigned int l)
|
||||
{
|
||||
return (l == 0) ? 0 : k >> (KEYLENGTH-l) << (KEYLENGTH-l);
|
||||
}
|
||||
|
||||
static inline t_key tkey_extract_bits(t_key a, int offset, int bits)
|
||||
static inline t_key tkey_extract_bits(t_key a, unsigned int offset, unsigned int bits)
|
||||
{
|
||||
if (offset < KEYLENGTH)
|
||||
return ((t_key)(a << offset)) >> (KEYLENGTH - bits);
|
||||
|
@ -1378,11 +1378,11 @@ int fib_table_lookup(struct fib_table *tb, const struct flowi *flp,
|
|||
int ret;
|
||||
struct rt_trie_node *n;
|
||||
struct tnode *pn;
|
||||
int pos, bits;
|
||||
unsigned int pos, bits;
|
||||
t_key key = ntohl(flp->fl4_dst);
|
||||
int chopped_off;
|
||||
unsigned int chopped_off;
|
||||
t_key cindex = 0;
|
||||
int current_prefix_length = KEYLENGTH;
|
||||
unsigned int current_prefix_length = KEYLENGTH;
|
||||
struct tnode *cn;
|
||||
t_key pref_mismatch;
|
||||
|
||||
|
|
Loading…
Reference in a new issue