diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py
index 4cf98b0..3c8c8eb 100644
--- a/Lib/test/test_faulthandler.py
+++ b/Lib/test/test_faulthandler.py
@@ -69,7 +69,7 @@
         return output.splitlines()
 
     def check_fatal_error(self, code, line_number, name_regex,
-                               filename=None, all_threads=False):
+                          filename=None, all_threads=False, other_regex=None):
         """
         Check that the fault handler for fatal errors is enabled and check the
         traceback from the child process output.
@@ -90,6 +90,8 @@
             lineno=line_number,
             name=name_regex,
             header=re.escape(header))
+        if other_regex:
+            regex += '|' + other_regex
         output = self.get_output(code, False, filename)
         output = '\n'.join(output)
         self.assertRegex(output, regex)
@@ -153,7 +155,6 @@
             2,
             'xyz')
 
-    @unittest.skipIf(True, 'test disabled, see #11393')
     @unittest.skipIf(not hasattr(faulthandler, '_stack_overflow'),
                      'need faulthandler._stack_overflow()')
     def test_stack_overflow(self):
@@ -163,7 +164,8 @@
 faulthandler._stack_overflow()
 """.strip(),
             3,
-            '(?:Segmentation fault|Bus error)')
+            '(?:Segmentation fault|Bus error)',
+            other_regex='unable to raise a stack overflow')
 
     def test_gil_released(self):
         self.check_fatal_error("""
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
index 8ef998d..e8ed3e8 100644
--- a/Modules/faulthandler.c
+++ b/Modules/faulthandler.c
@@ -16,6 +16,9 @@
 #  define FAULTHANDLER_USER
 #endif
 
+/* Allocate at maximum 100 MB of the stack to raise the stack overflow */
+#define STACK_OVERFLOW_MAX_SIZE (100*1024*1024)
+
 #define PUTS(fd, str) write(fd, str, strlen(str))
 
 #ifdef HAVE_SIGACTION
@@ -742,15 +745,39 @@
 }
 
 #if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION)
-static PyObject *
-faulthandler_stack_overflow(PyObject *self)
+void*
+stack_overflow(void *min_sp, void *max_sp, size_t *depth)
 {
     /* allocate 4096 bytes on the stack at each call */
     unsigned char buffer[4096];
+    void *sp = &buffer;
+    *depth += 1;
+    if (sp < min_sp || max_sp < sp)
+        return sp;
     buffer[0] = 1;
-    buffer[4095] = 2;
-    faulthandler_stack_overflow(self);
-    return PyLong_FromLong(buffer[0] + buffer[4095]);
+    buffer[4095] = 0;
+    return stack_overflow(min_sp, max_sp, depth);
+}
+
+static PyObject *
+faulthandler_stack_overflow(PyObject *self)
+{
+    size_t depth, size;
+    void *sp = &depth, *stop;
+
+    depth = 0;
+    stop = stack_overflow(sp - STACK_OVERFLOW_MAX_SIZE,
+                          sp + STACK_OVERFLOW_MAX_SIZE,
+                          &depth);
+    if (sp < stop)
+        size = stop - sp;
+    else
+        size = sp - stop;
+    PyErr_Format(PyExc_RuntimeError,
+        "unable to raise a stack overflow (allocated %zu bytes "
+        "on the stack, %zu recursive calls)",
+        size, depth);
+    return NULL;
 }
 #endif
 
