wallet: warn if lockable memory limit is too low

This commit is contained in:
moneromooo-monero 2018-11-03 18:32:05 +00:00
parent 963d247154
commit 177a9d76f9
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3
3 changed files with 25 additions and 0 deletions

View file

@ -728,6 +728,21 @@ std::string get_nix_version_display_string()
return true; return true;
} }
ssize_t get_lockable_memory()
{
#ifdef __GLIBC__
struct rlimit rlim;
if (getrlimit(RLIMIT_MEMLOCK, &rlim) < 0)
{
MERROR("Failed to determine the lockable memory limit");
return -1;
}
return rlim.rlim_cur;
#else
return -1;
#endif
}
bool on_startup() bool on_startup()
{ {
mlog_configure("", true); mlog_configure("", true);

View file

@ -221,6 +221,8 @@ namespace tools
void set_strict_default_file_permissions(bool strict); void set_strict_default_file_permissions(bool strict);
ssize_t get_lockable_memory();
void set_max_concurrency(unsigned n); void set_max_concurrency(unsigned n);
unsigned get_max_concurrency(); unsigned get_max_concurrency();

View file

@ -211,6 +211,14 @@ namespace wallet_args
Print(print) << boost::format(wallet_args::tr("Logging to %s")) % log_path; Print(print) << boost::format(wallet_args::tr("Logging to %s")) % log_path;
const ssize_t lockable_memory = tools::get_lockable_memory();
if (lockable_memory >= 0 && lockable_memory < 256 * 4096) // 256 pages -> at least 256 secret keys and other such small/medium objects
Print(print) << tr("WARNING: You may not have a high enough lockable memory limit")
#ifdef ELPP_OS_UNIX
<< ", " << tr("see ulimit -l")
#endif
;
return {std::move(vm), should_terminate}; return {std::move(vm), should_terminate};
} }
} }