Jiri Wiesner 410278
From 7c4a6309e27f411743817fe74a832ec2d2798a4b Mon Sep 17 00:00:00 2001
Jiri Wiesner 410278
From: Jakub Kicinski <kuba@kernel.org>
Jiri Wiesner 410278
Date: Mon, 12 Dec 2022 19:20:37 -0800
Jiri Wiesner 410278
Subject: [PATCH] ipvs: fix type warning in do_div() on 32 bit
Jiri Wiesner 410278
Git-commit: 7c4a6309e27f411743817fe74a832ec2d2798a4b
Jiri Wiesner 410278
Patch-mainline: v6.2-rc1
Jiri Wiesner 410278
References: bsc#1207361
Jiri Wiesner 410278
Jiri Wiesner 410278
32 bit platforms without 64bit div generate the following warning:
Jiri Wiesner 410278
Jiri Wiesner 410278
net/netfilter/ipvs/ip_vs_est.c: In function 'ip_vs_est_calc_limits':
Jiri Wiesner 410278
include/asm-generic/div64.h:222:35: warning: comparison of distinct pointer types lacks a cast
Jiri Wiesner 410278
  222 |         (void)(((typeof((n)) *)0) == ((uint64_t *)0));  \
Jiri Wiesner 410278
      |                                   ^~
Jiri Wiesner 410278
net/netfilter/ipvs/ip_vs_est.c:694:17: note: in expansion of macro 'do_div'
Jiri Wiesner 410278
  694 |                 do_div(val, loops);
Jiri Wiesner 410278
      |                 ^~~~~~
Jiri Wiesner 410278
include/asm-generic/div64.h:222:35: warning: comparison of distinct pointer types lacks a cast
Jiri Wiesner 410278
  222 |         (void)(((typeof((n)) *)0) == ((uint64_t *)0));  \
Jiri Wiesner 410278
      |                                   ^~
Jiri Wiesner 410278
net/netfilter/ipvs/ip_vs_est.c:700:33: note: in expansion of macro 'do_div'
Jiri Wiesner 410278
  700 |                                 do_div(val, min_est);
Jiri Wiesner 410278
      |                                 ^~~~~~
Jiri Wiesner 410278
Jiri Wiesner 410278
first argument of do_div() should be unsigned. We can't just cast
Jiri Wiesner 410278
as do_div() updates it as well, so we need an lval.
Jiri Wiesner 410278
Make val unsigned in the first place, all paths check that the value
Jiri Wiesner 410278
they assign to this variables are non-negative already.
Jiri Wiesner 410278
Jiri Wiesner 410278
Fixes: 705dd3444081 ("ipvs: use kthreads for stats estimation")
Jiri Wiesner 410278
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Jiri Wiesner 410278
Link: https://lore.kernel.org/r/20221213032037.844517-1-kuba@kernel.org
Jiri Wiesner 410278
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Jiri Wiesner 410278
Signed-off-by: Jiri Wiesner <jwiesner@suse.de>
Jiri Wiesner 410278
---
Jiri Wiesner 410278
 net/netfilter/ipvs/ip_vs_est.c | 3 ++-
Jiri Wiesner 410278
 1 file changed, 2 insertions(+), 1 deletion(-)
Jiri Wiesner 410278
Jiri Wiesner 410278
diff --git a/net/netfilter/ipvs/ip_vs_est.c b/net/netfilter/ipvs/ip_vs_est.c
Jiri Wiesner 410278
index df56073bb282..ce2a1549b304 100644
Jiri Wiesner 410278
--- a/net/netfilter/ipvs/ip_vs_est.c
Jiri Wiesner 410278
+++ b/net/netfilter/ipvs/ip_vs_est.c
Jiri Wiesner 410278
@@ -640,9 +640,10 @@ static int ip_vs_est_calc_limits(struct netns_ipvs *ipvs, int *chain_max)
Jiri Wiesner 410278
 	int i, loops, ntest;
Jiri Wiesner 410278
 	s32 min_est = 0;
Jiri Wiesner 410278
 	ktime_t t1, t2;
Jiri Wiesner 410278
-	s64 diff, val;
Jiri Wiesner 410278
 	int max = 8;
Jiri Wiesner 410278
 	int ret = 1;
Jiri Wiesner 410278
+	s64 diff;
Jiri Wiesner 410278
+	u64 val;
Jiri Wiesner 410278
 
Jiri Wiesner 410278
 	INIT_HLIST_HEAD(&chain);
Jiri Wiesner 410278
 	mutex_lock(&__ip_vs_mutex);
Jiri Wiesner 410278
-- 
Jiri Wiesner 410278
2.35.3
Jiri Wiesner 410278