diff --git a/src/device/device_default.cpp b/src/device/device_default.cpp index 30bb4a2e8..17b21c0ff 100644 --- a/src/device/device_default.cpp +++ b/src/device/device_default.cpp @@ -30,6 +30,7 @@ +#include #include "device_default.hpp" #include "int-util.h" #include "crypto/wallet/crypto.h" @@ -82,19 +83,32 @@ namespace hw { return true; } + // serialize mode access so callers cannot observe another wallet's transient signing mode bool device_default::set_mode(device_mode mode) { + boost::lock_guard lock(device_locker); return device::set_mode(mode); } + device::device_mode device_default::get_mode() const { + boost::lock_guard lock(device_locker); + return device::get_mode(); + } + /* ======================================================================= */ /* LOCKER */ /* ======================================================================= */ - void device_default::lock() { } + void device_default::lock() { + device_locker.lock(); + } - bool device_default::try_lock() { return true; } + bool device_default::try_lock() { + return device_locker.try_lock(); + } - void device_default::unlock() { } + void device_default::unlock() { + device_locker.unlock(); + } /* ======================================================================= */ /* WALLET & ADDRESS */ diff --git a/src/device/device_default.hpp b/src/device/device_default.hpp index 9c8dbb099..28984c78f 100644 --- a/src/device/device_default.hpp +++ b/src/device/device_default.hpp @@ -29,6 +29,7 @@ #pragma once +#include #include "device.hpp" namespace hw { @@ -60,6 +61,7 @@ namespace hw { bool disconnect() override; bool set_mode(device_mode mode) override; + device_mode get_mode() const override; device_type get_type() const override {return device_type::SOFTWARE;}; @@ -141,6 +143,10 @@ namespace hw { bool clsag_sign(const rct::key &c, const rct::key &a, const rct::key &p, const rct::key &z, const rct::key &mu_P, const rct::key &mu_C, rct::key &s) override; bool close_tx(void) override; + + private: + // Locker for concurrent access + mutable boost::recursive_mutex device_locker; }; }