diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake
index 12e94cfd007e7ec2d00722ea0dc6d272a30cf67d..9b8c317e0cbb1bba7f69c6eca1f2e3a1bda699cf 100644
--- a/cmake/compiler.cmake
+++ b/cmake/compiler.cmake
@@ -246,9 +246,6 @@ macro(enable_tnt_compile_flags)
             object-size
             # See https://github.com/tarantool/tarantool/issues/10742.
             pointer-overflow
-            # Integer overflow and truncation are disabled due to extensive
-            # usage of this UB in SQL code to 'implement' some kind of int65_t.
-            signed-integer-overflow
             # NULL checking is disabled, because this is not a UB and raises
             # lots of false-positive fails such as typeof(*obj) with
             # obj == NULL, or memcpy() with NULL argument and 0 size.
diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
index 95844b76c7490a354b597b2b0aade2049184ca28..b5aa42ff1e87cc2262165f82388aeac1a8decfec 100644
--- a/src/box/sql/expr.c
+++ b/src/box/sql/expr.c
@@ -3166,6 +3166,11 @@ expr_code_dec(struct Parse *parser, struct Expr *expr, bool is_neg, int reg)
  * @param neg_flag True if value is negative.
  * @param mem Register to store parsed integer
  */
+#if ENABLE_UB_SANITIZER
+static void
+expr_code_int(struct Parse *parse, struct Expr *expr, bool is_neg, int mem)
+__attribute__((no_sanitize("signed-integer-overflow")));
+#endif
 static void
 expr_code_int(struct Parse *parse, struct Expr *expr, bool is_neg,
 	      int mem)
diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index 3aa29f419fc27572e0b6b8db4c7ac5c44c85f5d4..8df4338400231df3747c036bd6c45493655245d3 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -234,6 +234,11 @@ step_group_concat(struct sql_context *ctx, int argc, const struct Mem *argv)
 }
 
 /** Implementations of the ABS() function. */
+#if ENABLE_UB_SANITIZER
+static void
+func_abs_int(struct sql_context *ctx, int argc, const struct Mem *argv)
+  __attribute__((no_sanitize("signed-integer-overflow")));
+#endif
 static void
 func_abs_int(struct sql_context *ctx, int argc, const struct Mem *argv)
 {
diff --git a/src/box/sql/util.c b/src/box/sql/util.c
index 7e6826976a0d03b2b3ad45cb7d7cefb16798ffb1..3dfb28a0878dc7b42142cf824fd7d9086f261d7d 100644
--- a/src/box/sql/util.c
+++ b/src/box/sql/util.c
@@ -820,6 +820,13 @@ sqlHexToBlob(const char *z, int n)
 	return zBlob;
 }
 
+#if ENABLE_UB_SANITIZER
+/* See https://github.com/tarantool/tarantool/issues/10703. */
+int
+sql_add_int(int64_t lhs, bool is_lhs_neg, int64_t rhs, bool is_rhs_neg,
+	    int64_t *res, bool *is_res_neg)
+  __attribute__((no_sanitize("signed-integer-overflow")));
+#endif
 int
 sql_add_int(int64_t lhs, bool is_lhs_neg, int64_t rhs, bool is_rhs_neg,
 	    int64_t *res, bool *is_res_neg)
@@ -849,6 +856,13 @@ sql_add_int(int64_t lhs, bool is_lhs_neg, int64_t rhs, bool is_rhs_neg,
 	return 0;
 }
 
+#if ENABLE_UB_SANITIZER
+/* See https://github.com/tarantool/tarantool/issues/10703. */
+int
+sql_sub_int(int64_t lhs, bool is_lhs_neg, int64_t rhs, bool is_rhs_neg,
+	    int64_t *res, bool *is_res_neg)
+  __attribute__((no_sanitize("signed-integer-overflow")));
+#endif
 int
 sql_sub_int(int64_t lhs, bool is_lhs_neg, int64_t rhs, bool is_rhs_neg,
 	    int64_t *res, bool *is_res_neg)
@@ -934,6 +948,13 @@ sql_mul_int(int64_t lhs, bool is_lhs_neg, int64_t rhs, bool is_rhs_neg,
 	return 0;
 }
 
+#if ENABLE_UB_SANITIZER
+/* See https://github.com/tarantool/tarantool/issues/10703. */
+int
+sql_div_int(int64_t lhs, bool is_lhs_neg, int64_t rhs, bool is_rhs_neg,
+	    int64_t *res, bool *is_res_neg)
+  __attribute__((no_sanitize("signed-integer-overflow")));
+#endif
 int
 sql_div_int(int64_t lhs, bool is_lhs_neg, int64_t rhs, bool is_rhs_neg,
 	    int64_t *res, bool *is_res_neg)
diff --git a/src/lib/core/datetime.c b/src/lib/core/datetime.c
index 22b7705910d6d65cddc20f26ba46c6523aacd38d..6ee0b752eed2641633e36937fadbf06c92eb959e 100644
--- a/src/lib/core/datetime.c
+++ b/src/lib/core/datetime.c
@@ -34,6 +34,12 @@
  * since Rata Die (0001-01-01).
  * DT_EPOCH_1970_OFFSET is the distance in days from Rata Die to Epoch.
  */
+#if ENABLE_UB_SANITIZER
+/* See https://github.com/tarantool/tarantool/issues/10704. */
+static int
+local_dt(int64_t secs)
+  __attribute__((no_sanitize("signed-integer-overflow")));
+#endif
 static int
 local_dt(int64_t secs)
 {
diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c
index b5782d9784db9de7a449280e55d7b42a6acbaeb2..445525b5be758d77b91a136b04ecda5ba90a450e 100644
--- a/src/lib/core/fiber.c
+++ b/src/lib/core/fiber.c
@@ -276,6 +276,11 @@ static __thread bool fiber_parent_backtrace_enabled;
  * An action performed each time a context switch happens.
  * Used to count each fiber's processing time.
  */
+#if ENABLE_UB_SANITIZER
+static inline void
+clock_set_on_csw(struct fiber *caller)
+  __attribute__((no_sanitize("signed-integer-overflow")));
+#endif
 static inline void
 clock_set_on_csw(struct fiber *caller)
 {
diff --git a/src/trivia/config.h.cmake b/src/trivia/config.h.cmake
index dfdb9129d6ec47244ae4ed0baf417f4864758339..f3ddd3cc3075804006457779729e41301cdb9356 100644
--- a/src/trivia/config.h.cmake
+++ b/src/trivia/config.h.cmake
@@ -273,6 +273,7 @@
 #define DEFAULT_CFG SYSCONF_DIR "/" DEFAULT_CFG_FILENAME
 
 #cmakedefine ENABLE_ASAN 1
+#cmakedefine ENABLE_UB_SANITIZER 1
 
 /* Cacheline size to calculate alignments */
 #define CACHELINE_SIZE 64