提交 20080971 编写于 作者: X Xin Long 提交者: David S. Miller

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: 5024c33a ("gue: Add infrastructure for flags and options")
Signed-off-by: NXin Long <lucien.xin@gmail.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 2342b8d9
...@@ -44,10 +44,10 @@ struct guehdr { ...@@ -44,10 +44,10 @@ struct guehdr {
#else #else
#error "Please fix <asm/byteorder.h>" #error "Please fix <asm/byteorder.h>"
#endif #endif
__u8 proto_ctype; __u8 proto_ctype;
__u16 flags; __be16 flags;
}; };
__u32 word; __be32 word;
}; };
}; };
...@@ -84,11 +84,10 @@ static inline size_t guehdr_priv_flags_len(__be32 flags) ...@@ -84,11 +84,10 @@ static inline size_t guehdr_priv_flags_len(__be32 flags)
* if there is an unknown standard or private flags, or the options length for * if there is an unknown standard or private flags, or the options length for
* the flags exceeds the options length specific in hlen of the GUE header. * the flags exceeds the options length specific in hlen of the GUE header.
*/ */
static inline int validate_gue_flags(struct guehdr *guehdr, static inline int validate_gue_flags(struct guehdr *guehdr, size_t optlen)
size_t optlen)
{ {
__be16 flags = guehdr->flags;
size_t len; size_t len;
__be32 flags = guehdr->flags;
if (flags & ~GUE_FLAGS_ALL) if (flags & ~GUE_FLAGS_ALL)
return 1; return 1;
...@@ -101,12 +100,13 @@ static inline int validate_gue_flags(struct guehdr *guehdr, ...@@ -101,12 +100,13 @@ static inline int validate_gue_flags(struct guehdr *guehdr,
/* Private flags are last four bytes accounted in /* Private flags are last four bytes accounted in
* guehdr_flags_len * guehdr_flags_len
*/ */
flags = *(__be32 *)((void *)&guehdr[1] + len - GUE_LEN_PRIV); __be32 pflags = *(__be32 *)((void *)&guehdr[1] +
len - GUE_LEN_PRIV);
if (flags & ~GUE_PFLAGS_ALL) if (pflags & ~GUE_PFLAGS_ALL)
return 1; return 1;
len += guehdr_priv_flags_len(flags); len += guehdr_priv_flags_len(pflags);
if (len > optlen) if (len > optlen)
return 1; return 1;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册