diff mbox series

[net,2/3] sctp: force the params with right types for sctp csum apis

Message ID b6a18a03feb2b815d75482e266cb5e4603bb8132.1511698478.git.lucien.xin@gmail.com
State Accepted, archived
Delegated to: David Miller
Headers show
Series sctp: fix some other sparse errors | expand

Commit Message

Xin Long Nov. 26, 2017, 12:16 p.m. UTC
Now sctp_csum_xxx doesn't really match the param types of these common
csum apis. As sctp_csum_xxx is defined in sctp/checksum.h, many sparse
errors occur when make C=2 not only with M=net/sctp but also with other
modules that include this header file.

This patch is to force them fit in csum apis with the right types.

Fixes: e6d8b64b34aa ("net: sctp: fix and consolidate SCTP checksumming code")
Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 include/net/sctp/checksum.h | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

Comments

Marcelo Ricardo Leitner Nov. 27, 2017, 12:32 p.m. UTC | #1
On Sun, Nov 26, 2017 at 08:16:07PM +0800, Xin Long wrote:
> Now sctp_csum_xxx doesn't really match the param types of these common
> csum apis. As sctp_csum_xxx is defined in sctp/checksum.h, many sparse
> errors occur when make C=2 not only with M=net/sctp but also with other
> modules that include this header file.
> 
> This patch is to force them fit in csum apis with the right types.
> 
> Fixes: e6d8b64b34aa ("net: sctp: fix and consolidate SCTP checksumming code")
> Signed-off-by: Xin Long <lucien.xin@gmail.com>

Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>

> ---
>  include/net/sctp/checksum.h | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/include/net/sctp/checksum.h b/include/net/sctp/checksum.h
> index 4a5b9a3..32ee65a 100644
> --- a/include/net/sctp/checksum.h
> +++ b/include/net/sctp/checksum.h
> @@ -48,31 +48,32 @@ static inline __wsum sctp_csum_update(const void *buff, int len, __wsum sum)
>  	/* This uses the crypto implementation of crc32c, which is either
>  	 * implemented w/ hardware support or resolves to __crc32c_le().
>  	 */
> -	return crc32c(sum, buff, len);
> +	return (__force __wsum)crc32c((__force __u32)sum, buff, len);
>  }
>  
>  static inline __wsum sctp_csum_combine(__wsum csum, __wsum csum2,
>  				       int offset, int len)
>  {
> -	return __crc32c_le_combine(csum, csum2, len);
> +	return (__force __wsum)__crc32c_le_combine((__force __u32)csum,
> +						   (__force __u32)csum2, len);
>  }
>  
>  static inline __le32 sctp_compute_cksum(const struct sk_buff *skb,
>  					unsigned int offset)
>  {
>  	struct sctphdr *sh = sctp_hdr(skb);
> -        __le32 ret, old = sh->checksum;
>  	const struct skb_checksum_ops ops = {
>  		.update  = sctp_csum_update,
>  		.combine = sctp_csum_combine,
>  	};
> +	__le32 old = sh->checksum;
> +	__wsum new;
>  
>  	sh->checksum = 0;
> -	ret = cpu_to_le32(~__skb_checksum(skb, offset, skb->len - offset,
> -					  ~(__u32)0, &ops));
> +	new = ~__skb_checksum(skb, offset, skb->len - offset, ~(__wsum)0, &ops);
>  	sh->checksum = old;
>  
> -	return ret;
> +	return cpu_to_le32((__force __u32)new);
>  }
>  
>  #endif /* __sctp_checksum_h__ */
> -- 
> 2.1.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
diff mbox series

Patch

diff --git a/include/net/sctp/checksum.h b/include/net/sctp/checksum.h
index 4a5b9a3..32ee65a 100644
--- a/include/net/sctp/checksum.h
+++ b/include/net/sctp/checksum.h
@@ -48,31 +48,32 @@  static inline __wsum sctp_csum_update(const void *buff, int len, __wsum sum)
 	/* This uses the crypto implementation of crc32c, which is either
 	 * implemented w/ hardware support or resolves to __crc32c_le().
 	 */
-	return crc32c(sum, buff, len);
+	return (__force __wsum)crc32c((__force __u32)sum, buff, len);
 }
 
 static inline __wsum sctp_csum_combine(__wsum csum, __wsum csum2,
 				       int offset, int len)
 {
-	return __crc32c_le_combine(csum, csum2, len);
+	return (__force __wsum)__crc32c_le_combine((__force __u32)csum,
+						   (__force __u32)csum2, len);
 }
 
 static inline __le32 sctp_compute_cksum(const struct sk_buff *skb,
 					unsigned int offset)
 {
 	struct sctphdr *sh = sctp_hdr(skb);
-        __le32 ret, old = sh->checksum;
 	const struct skb_checksum_ops ops = {
 		.update  = sctp_csum_update,
 		.combine = sctp_csum_combine,
 	};
+	__le32 old = sh->checksum;
+	__wsum new;
 
 	sh->checksum = 0;
-	ret = cpu_to_le32(~__skb_checksum(skb, offset, skb->len - offset,
-					  ~(__u32)0, &ops));
+	new = ~__skb_checksum(skb, offset, skb->len - offset, ~(__wsum)0, &ops);
 	sh->checksum = old;
 
-	return ret;
+	return cpu_to_le32((__force __u32)new);
 }
 
 #endif /* __sctp_checksum_h__ */