diff options
author | Xin Long <lucien.xin@gmail.com> | 2017-12-10 03:56:00 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-12-11 14:10:06 -0500 |
commit | 200809716aed1cac586fcac4c0551a688439be1f (patch) | |
tree | fb2ee0b811b8cf511f1d42bab3ab34b5f9d0d825 | |
parent | 2342b8d95bcae5946e1b9b8d58645f37500ef2e7 (diff) |
fou: fix some member types in guehdr
guehdr struct is used to build or parse gue packets, which
are always in big endian. It's better to define all guehdr
members as __beXX types.
Also, in validate_gue_flags it's not good to use a __be32
variable for both Standard flags(__be16) and Private flags
(__be32), and pass it to other funcions.
This patch could fix a bunch of sparse warnings from fou.
Fixes: 5024c33ac354 ("gue: Add infrastructure for flags and options")
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/net/gue.h | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/include/net/gue.h b/include/net/gue.h index 2fdb29ca74c2..fdad41469b65 100644 --- a/include/net/gue.h +++ b/include/net/gue.h | |||
@@ -44,10 +44,10 @@ struct guehdr { | |||
44 | #else | 44 | #else |
45 | #error "Please fix <asm/byteorder.h>" | 45 | #error "Please fix <asm/byteorder.h>" |
46 | #endif | 46 | #endif |
47 | __u8 proto_ctype; | 47 | __u8 proto_ctype; |
48 | __u16 flags; | 48 | __be16 flags; |
49 | }; | 49 | }; |
50 | __u32 word; | 50 | __be32 word; |
51 | }; | 51 | }; |
52 | }; | 52 | }; |
53 | 53 | ||
@@ -84,11 +84,10 @@ static inline size_t guehdr_priv_flags_len(__be32 flags) | |||
84 | * if there is an unknown standard or private flags, or the options length for | 84 | * if there is an unknown standard or private flags, or the options length for |
85 | * the flags exceeds the options length specific in hlen of the GUE header. | 85 | * the flags exceeds the options length specific in hlen of the GUE header. |
86 | */ | 86 | */ |
87 | static inline int validate_gue_flags(struct guehdr *guehdr, | 87 | static inline int validate_gue_flags(struct guehdr *guehdr, size_t optlen) |
88 | size_t optlen) | ||
89 | { | 88 | { |
89 | __be16 flags = guehdr->flags; | ||
90 | size_t len; | 90 | size_t len; |
91 | __be32 flags = guehdr->flags; | ||
92 | 91 | ||
93 | if (flags & ~GUE_FLAGS_ALL) | 92 | if (flags & ~GUE_FLAGS_ALL) |
94 | return 1; | 93 | return 1; |
@@ -101,12 +100,13 @@ static inline int validate_gue_flags(struct guehdr *guehdr, | |||
101 | /* Private flags are last four bytes accounted in | 100 | /* Private flags are last four bytes accounted in |
102 | * guehdr_flags_len | 101 | * guehdr_flags_len |
103 | */ | 102 | */ |
104 | flags = *(__be32 *)((void *)&guehdr[1] + len - GUE_LEN_PRIV); | 103 | __be32 pflags = *(__be32 *)((void *)&guehdr[1] + |
104 | len - GUE_LEN_PRIV); | ||
105 | 105 | ||
106 | if (flags & ~GUE_PFLAGS_ALL) | 106 | if (pflags & ~GUE_PFLAGS_ALL) |
107 | return 1; | 107 | return 1; |
108 | 108 | ||
109 | len += guehdr_priv_flags_len(flags); | 109 | len += guehdr_priv_flags_len(pflags); |
110 | if (len > optlen) | 110 | if (len > optlen) |
111 | return 1; | 111 | return 1; |
112 | } | 112 | } |