Add ubsan support
diff --git a/Makefile b/Makefile
index 4e22616..199c42e 100644
--- a/Makefile
+++ b/Makefile
@@ -75,6 +75,18 @@
 LDFLAGS_msan = -fsanitize=memory
 DEFINES_msan = NDEBUG
 
+VALID_CONFIG_ubsan = 1
+REQUIRE_CUSTOM_LIBRARIES_ubsan = 1
+CC_ubsan = clang
+CXX_ubsan = clang++
+LD_ubsan = clang
+LDXX_ubsan = clang++
+CPPFLAGS_ubsan = -O1 -fsanitize=undefined -fno-omit-frame-pointer
+OPENSSL_CFLAGS_ubsan = -DPURIFY
+OPENSSL_CONFIG_ubsan = no-asm
+LDFLAGS_ubsan = -fsanitize=undefined
+DEFINES_ubsan = NDEBUG
+
 VALID_CONFIG_gcov = 1
 CC_gcov = gcc
 CXX_gcov = g++
@@ -3604,7 +3616,6 @@
 
 
 
-
 ifneq ($(NO_DEPS),true)
 -include $(LIBEND2END_TEST_EMPTY_BATCH_OBJS:.o=.dep)
 endif
diff --git a/templates/Makefile.template b/templates/Makefile.template
index c5e6d0a..b9ae217 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -92,6 +92,18 @@
 LDFLAGS_msan = -fsanitize=memory
 DEFINES_msan = NDEBUG
 
+VALID_CONFIG_ubsan = 1
+REQUIRE_CUSTOM_LIBRARIES_ubsan = 1
+CC_ubsan = clang
+CXX_ubsan = clang++
+LD_ubsan = clang
+LDXX_ubsan = clang++
+CPPFLAGS_ubsan = -O1 -fsanitize=undefined -fno-omit-frame-pointer
+OPENSSL_CFLAGS_ubsan = -DPURIFY
+OPENSSL_CONFIG_ubsan = no-asm
+LDFLAGS_ubsan = -fsanitize=undefined
+DEFINES_ubsan = NDEBUG
+
 VALID_CONFIG_gcov = 1
 CC_gcov = gcc
 CXX_gcov = g++
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index ab6728b..0f3222b 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -111,6 +111,7 @@
     'tsan': SimpleConfig('tsan', environ={
         'TSAN_OPTIONS': 'suppressions=tools/tsan_suppressions.txt'}),
     'msan': SimpleConfig('msan'),
+    'ubsan': SimpleConfig('ubsan'),
     'asan': SimpleConfig('asan', environ={
         'ASAN_OPTIONS': 'detect_leaks=1:color=always:suppressions=tools/tsan_suppressions.txt'}),
     'gcov': SimpleConfig('gcov'),