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: 5024c33ac3 ("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>
			
			
This commit is contained in:
		
				
					committed by
					
						 David S. Miller
						David S. Miller
					
				
			
			
				
	
			
			
			
						parent
						
							2342b8d95b
						
					
				
				
					commit
					200809716a
				
			| @@ -44,10 +44,10 @@ struct guehdr { | ||||
| #else | ||||
| #error  "Please fix <asm/byteorder.h>" | ||||
| #endif | ||||
| 			__u8    proto_ctype; | ||||
| 			__u16   flags; | ||||
| 			__u8	proto_ctype; | ||||
| 			__be16	flags; | ||||
| 		}; | ||||
| 		__u32 word; | ||||
| 		__be32	word; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| @@ -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 | ||||
|  * the flags exceeds the options length specific in hlen of the GUE header. | ||||
|  */ | ||||
| static inline int validate_gue_flags(struct guehdr *guehdr, | ||||
| 				     size_t optlen) | ||||
| static inline int validate_gue_flags(struct guehdr *guehdr, size_t optlen) | ||||
| { | ||||
| 	__be16 flags = guehdr->flags; | ||||
| 	size_t len; | ||||
| 	__be32 flags = guehdr->flags; | ||||
| 
 | ||||
| 	if (flags & ~GUE_FLAGS_ALL) | ||||
| 		return 1; | ||||
| @@ -101,12 +100,13 @@ static inline int validate_gue_flags(struct guehdr *guehdr, | ||||
| 		/* Private flags are last four bytes accounted in
 | ||||
| 		 * 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; | ||||
| 
 | ||||
| 		len += guehdr_priv_flags_len(flags); | ||||
| 		len += guehdr_priv_flags_len(pflags); | ||||
| 		if (len > optlen) | ||||
| 			return 1; | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user