From 43074891479b4883645b06c4cc5341469d9cd9cd Mon Sep 17 00:00:00 2001
From: moneromooo-monero <moneromooo-monero@users.noreply.github.com>
Date: Sun, 15 Jul 2018 13:20:36 +0100
Subject: [PATCH] wallet: disable core dumps on startup in release mode

---
 src/common/util.cpp        | 16 ++++++++++++++++
 src/common/util.h          |  2 ++
 src/wallet/api/utils.cpp   |  3 +++
 src/wallet/wallet_args.cpp |  3 +++
 4 files changed, 24 insertions(+)

diff --git a/src/common/util.cpp b/src/common/util.cpp
index 7d9d7b408..be49c77c3 100644
--- a/src/common/util.cpp
+++ b/src/common/util.cpp
@@ -37,6 +37,7 @@
 #ifdef __GLIBC__
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/resource.h>
 #include <ustat.h>
 #include <unistd.h>
 #include <dirent.h>
@@ -682,6 +683,21 @@ std::string get_nix_version_display_string()
   static void setup_crash_dump() {}
 #endif
 
+  bool disable_core_dumps()
+  {
+#ifdef __GLIBC__
+    // disable core dumps in release mode
+    struct rlimit rlimit;
+    rlimit.rlim_cur = rlimit.rlim_max = 0;
+    if (setrlimit(RLIMIT_CORE, &rlimit))
+    {
+      MWARNING("Failed to disable core dumps");
+      return false;
+    }
+#endif
+    return true;
+  }
+
   bool on_startup()
   {
     mlog_configure("", true);
diff --git a/src/common/util.h b/src/common/util.h
index a57a85fee..b98a83bf6 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -149,6 +149,8 @@ namespace tools
 
   bool sanitize_locale();
 
+  bool disable_core_dumps();
+
   bool on_startup();
 
   /*! \brief Defines a signal handler for win32 and *nix
diff --git a/src/wallet/api/utils.cpp b/src/wallet/api/utils.cpp
index aebe41e59..86fe56564 100644
--- a/src/wallet/api/utils.cpp
+++ b/src/wallet/api/utils.cpp
@@ -51,6 +51,9 @@ bool isAddressLocal(const std::string &address)
 void onStartup()
 {
     tools::on_startup();
+#ifdef NDEBUG
+    tools::disable_core_dumps();
+#endif
 }
 
 }
diff --git a/src/wallet/wallet_args.cpp b/src/wallet/wallet_args.cpp
index a629eb506..95a4e0ad6 100644
--- a/src/wallet/wallet_args.cpp
+++ b/src/wallet/wallet_args.cpp
@@ -109,6 +109,9 @@ namespace wallet_args
 
     std::string lang = i18n_get_language();
     tools::on_startup();
+#ifdef NDEBUG
+    tools::disable_core_dumps();
+#endif
     tools::set_strict_default_file_permissions(true);
 
     epee::string_tools::set_module_name_and_folder(argv[0]);