1
0
mirror of https://github.com/xmrig/xmrig.git synced 2025-12-10 09:02:45 -05:00

Compare commits

...

5 Commits

Author SHA1 Message Date
Tony Butler
4649f90dfd Merge 8f507b7d09 into 33315ba2ef 2024-02-12 14:35:16 +00:00
XMRig
33315ba2ef Merge branch 'Daviey-HTTPRebindSegFault' into dev 2024-02-12 14:51:34 +07:00
XMRig
2c9c40d623 Merge branch 'HTTPRebindSegFault' of https://github.com/Daviey/xmrig into Daviey-HTTPRebindSegFault 2024-02-12 14:50:48 +07:00
Dave Walker (Daviey)
daa6328418 Fix segfault in HTTP API rebind
Previously with HTTP API enabled on brenchmarking run, it is possible
to cause a segfault due to an issue handling the m_httpd pointer and
rebinding.

  - Initialize m_httpd to nullptr to indicate when it's not in use.
  - Safely delete m_httpd in Api's destructor to prevent use-after-free
    issues.
  - Add checks to ensure m_httpd is not nullptr before usage in start,
    stop, and tick methods.
  - Log errors for HTTP server start failures to aid in debugging.

Fixes MoneroOcean/xmrig#120

Signed-off-by: Dave Walker (Daviey) <email@daviey.com>
2024-02-11 17:52:36 +00:00
Tony Butler
8f507b7d09 Fix minor leaks and some unintialized components (valgrind) 2023-07-12 02:06:53 -06:00
4 changed files with 30 additions and 11 deletions

View File

@@ -20,7 +20,7 @@ set(SOURCES_BACKEND_COMMON
src/backend/common/Workers.cpp
)
if (WITH_RANDOMX AND WITH_BENCHMARK)
if (WITH_BENCHMARK AND (WITH_RANDOMX OR WITH_GHOSTRIDER))
list(APPEND HEADERS_BACKEND_COMMON
src/backend/common/benchmark/Benchmark.h
src/backend/common/benchmark/BenchState_test.h

View File

@@ -39,6 +39,7 @@
#include <thread>
#include <iostream>
namespace xmrig {
@@ -80,7 +81,8 @@ static rapidjson::Value getResources(rapidjson::Document &doc)
xmrig::Api::Api(Base *base) :
m_base(base),
m_timestamp(Chrono::currentMSecsSinceEpoch())
m_timestamp(Chrono::currentMSecsSinceEpoch()),
m_httpd(nullptr)
{
base->addListener(this);
@@ -91,7 +93,11 @@ xmrig::Api::Api(Base *base) :
xmrig::Api::~Api()
{
# ifdef XMRIG_FEATURE_HTTP
delete m_httpd;
if (m_httpd) {
m_httpd->stop();
delete m_httpd;
m_httpd = nullptr; // Ensure the pointer is set to nullptr after deletion
}
# endif
}
@@ -109,8 +115,14 @@ void xmrig::Api::start()
genWorkerId(m_base->config()->apiWorkerId());
# ifdef XMRIG_FEATURE_HTTP
m_httpd = new Httpd(m_base);
m_httpd->start();
if (!m_httpd) {
m_httpd = new Httpd(m_base);
if (!m_httpd->start()) {
std::cerr << "HTTP server failed to start." << std::endl;
delete m_httpd; // Properly handle failure to start
m_httpd = nullptr;
}
}
# endif
}
@@ -118,7 +130,9 @@ void xmrig::Api::start()
void xmrig::Api::stop()
{
# ifdef XMRIG_FEATURE_HTTP
m_httpd->stop();
if (m_httpd) {
m_httpd->stop();
}
# endif
}
@@ -126,13 +140,15 @@ void xmrig::Api::stop()
void xmrig::Api::tick()
{
# ifdef XMRIG_FEATURE_HTTP
if (m_httpd->isBound() || !m_base->config()->http().isEnabled()) {
if (!m_httpd || !m_base->config()->http().isEnabled() || m_httpd->isBound()) {
return;
}
if (++m_ticks % 10 == 0) {
m_ticks = 0;
m_httpd->start();
if (m_httpd) {
m_httpd->start();
}
}
# endif
}

View File

@@ -259,7 +259,7 @@ if (WITH_KAWPOW OR WITH_GHOSTRIDER)
endif()
if (WITH_RANDOMX AND WITH_BENCHMARK)
if (WITH_BENCHMARK AND (WITH_RANDOMX OR WITH_GHOSTRIDER))
add_definitions(/DXMRIG_FEATURE_BENCHMARK)
list(APPEND HEADERS_BASE

View File

@@ -333,8 +333,8 @@ void benchmark()
const CnHash::AlgoVariant* av = Cpu::info()->hasAES() ? av_hw_aes : av_soft_aes;
uint8_t buf[80];
uint8_t hash[32 * 8];
uint8_t buf[80] = { 0 };
uint8_t hash[32 * 8] = { 0 };
LOG_VERBOSE("%24s | N | Hashrate", "Algorithm");
LOG_VERBOSE("-------------------------|-----|-------------");
@@ -540,10 +540,13 @@ HelperThread* create_helper_thread(int64_t cpu_index, int priority, const std::v
});
if (hwloc_bitmap_weight(helper_cpu_set) > 0) {
hwloc_bitmap_free(main_threads_set);
return new HelperThread(helper_cpu_set, priority, is8MB);
}
}
}
hwloc_bitmap_free(helper_cpu_set);
hwloc_bitmap_free(main_threads_set);
#endif
return nullptr;