Add a trap

This commit is contained in:
Alexey Milovidov 2022-09-18 02:24:56 +02:00
parent 515972f459
commit 15e5fc96a1

View File

@ -14,6 +14,7 @@
#include <cstdlib> #include <cstdlib>
#include <unistd.h> #include <unistd.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <dlfcn.h>
namespace DB namespace DB
@ -25,6 +26,7 @@ namespace ErrorCodes
extern const int ILLEGAL_TYPE_OF_ARGUMENT; extern const int ILLEGAL_TYPE_OF_ARGUMENT;
extern const int BAD_ARGUMENTS; extern const int BAD_ARGUMENTS;
extern const int CANNOT_ALLOCATE_MEMORY; extern const int CANNOT_ALLOCATE_MEMORY;
extern const int CANNOT_DLOPEN;
} }
@ -136,7 +138,7 @@ public:
} }
else if (mode == "access context") else if (mode == "access context")
{ {
(void)context.getCurrentQueryId(); (void)context->getCurrentQueryId();
} }
else if (mode == "stack overflow") else if (mode == "stack overflow")
{ {
@ -166,6 +168,12 @@ public:
maps.push_back(map); maps.push_back(map);
} }
} }
else if (mode == "dlopen")
{
void * handle = dlopen("libc.so.6", RTLD_NOW);
if (!handle)
throw Exception(ErrorCodes::CANNOT_DLOPEN, "Cannot dlopen: ({})", dlerror()); // NOLINT(concurrency-mt-unsafe) // MT-Safe on Linux, see man dlerror
}
else else
throw Exception("Unknown trap mode", ErrorCodes::BAD_ARGUMENTS); throw Exception("Unknown trap mode", ErrorCodes::BAD_ARGUMENTS);
} }