UB Sanitizer reports:
tests/test-hash.c:59:40: runtime error: shift exponent 64 is too large for
64-bit type 'long unsigned int'
#0 0x44c3c9 in get_range128 tests/test-hash.c:59
#1 0x44cb2e in check_hash_bytes128 tests/test-hash.c:178
#2 0x44d14d in test_hash_main tests/test-hash.c:282
[...]
ofproto/ofproto-dpif-xlate.c:5607:45: runtime error: left shift of 65535 by
16 places cannot be represented in type 'int'
#0 0x53fe9f in xlate_sample_action ofproto/ofproto-dpif-xlate.c:5607
#1 0x54d625 in do_xlate_actions ofproto/ofproto-dpif-xlate.c:7160
#2 0x553b76 in xlate_actions ofproto/ofproto-dpif-xlate.c:7806
#3 0x4fcb49 in upcall_xlate ofproto/ofproto-dpif-upcall.c:1237
#4 0x4fe02f in process_upcall ofproto/ofproto-dpif-upcall.c:1456
#5 0x4fda99 in upcall_cb ofproto/ofproto-dpif-upcall.c:1358
[...]
tests/test-util.c:89:23: runtime error: left shift of 1 by 31 places cannot
be represented in type 'int'
#0 0x476415 in test_ctz tests/test-util.c:89
[...]
lib/dpif-netlink.c:396:33: runtime error: left shift of 1 by 31 places cannot
be represented in type 'int'
#0 0x571b9f in dpif_netlink_open lib/dpif-netlink.c:396
Signed-off-by: Dumitru Ceara <[email protected]>
---
lib/dpif-netlink.c | 2 +-
ofproto/ofproto-dpif-xlate.c | 3 ++-
tests/test-hash.c | 2 +-
tests/test-util.c | 13 ++++++-------
4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c
index 424a28401901..8bd975225aa2 100644
--- a/lib/dpif-netlink.c
+++ b/lib/dpif-netlink.c
@@ -84,7 +84,7 @@ enum { MAX_PORTS = USHRT_MAX };
#define EPOLLEXCLUSIVE (1u << 28)
#endif
-#define OVS_DP_F_UNSUPPORTED (1 << 31);
+#define OVS_DP_F_UNSUPPORTED (1u << 31);
/* This PID is not used by the kernel datapath when using dispatch per CPU,
* but it is required to be set (not zero). */
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index cafcd014ade7..41461e802fb5 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -5618,7 +5618,8 @@ xlate_sample_action(struct xlate_ctx *ctx,
/* Scale the probability from 16-bit to 32-bit while representing
* the same percentage. */
- uint32_t probability = (os->probability << 16) | os->probability;
+ uint32_t probability =
+ ((uint32_t) os->probability << 16) | os->probability;
/* If ofp_port in flow sample action is equel to ofp_port,
* this sample action is a input port action. */
diff --git a/tests/test-hash.c b/tests/test-hash.c
index 5d3f8ea43f65..7c33922e3f02 100644
--- a/tests/test-hash.c
+++ b/tests/test-hash.c
@@ -174,7 +174,7 @@ check_hash_bytes128(void (*hash)(const void *, size_t,
uint32_t, ovs_u128 *),
set_bit128(&in2, j, n_bits);
hash(&in2, sizeof(ovs_u128), 0, &out2);
- for (ofs = 0; ofs < 128 - min_unique; ofs++) {
+ for (ofs = 1; ofs < 128 - min_unique; ofs++) {
uint64_t bits1 = get_range128(&out1, ofs, unique_mask);
uint64_t bits2 = get_range128(&out2, ofs, unique_mask);
diff --git a/tests/test-util.c b/tests/test-util.c
index f0fd0421086b..7d899fbbfd92 100644
--- a/tests/test-util.c
+++ b/tests/test-util.c
@@ -43,17 +43,16 @@ check_log_2_floor(uint32_t x, int n)
static void
test_log_2_floor(struct ovs_cmdl_context *ctx OVS_UNUSED)
{
- int n;
-
- for (n = 0; n < 32; n++) {
+ for (uint32_t n = 0; n < 32; n++) {
/* Check minimum x such that f(x) == n. */
- check_log_2_floor(1 << n, n);
+ check_log_2_floor(UINT32_C(1) << n, n);
/* Check maximum x such that f(x) == n. */
- check_log_2_floor((1 << n) | ((1 << n) - 1), n);
+ check_log_2_floor((UINT32_C(1) << n) | ((UINT32_C(1) << n) - 1), n);
/* Check a random value in the middle. */
- check_log_2_floor((random_uint32() & ((1 << n) - 1)) | (1 << n), n);
+ check_log_2_floor((random_uint32() & ((UINT32_C(1) << n) - 1))
+ | (UINT32_C(1) << n), n);
}
/* log_2_floor(0) is undefined, so don't check it. */
@@ -86,7 +85,7 @@ test_ctz(struct ovs_cmdl_context *ctx OVS_UNUSED)
for (n = 0; n < 32; n++) {
/* Check minimum x such that f(x) == n. */
- check_ctz32(1 << n, n);
+ check_ctz32(UINT32_C(1) << n, n);
/* Check maximum x such that f(x) == n. */
check_ctz32(UINT32_MAX << n, n);
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev