Fixed unaligned memory read in DMI

This commit is contained in:
SChernykh
2022-05-19 20:56:19 +02:00
parent e1a52ac9cc
commit ca7387b4f3
3 changed files with 6 additions and 6 deletions

View File

@@ -30,7 +30,7 @@ namespace xmrig {
template<typename T> template<typename T>
inline T readUnaligned(const T* ptr) inline T readUnaligned(const T* ptr)
{ {
static_assert(std::is_integral<T>::value, "Integer type required"); static_assert(std::is_trivially_copyable<T>::value, "T must be trivially copyable");
T result; T result;
memcpy(&result, ptr, sizeof(T)); memcpy(&result, ptr, sizeof(T));
@@ -41,7 +41,7 @@ inline T readUnaligned(const T* ptr)
template<typename T> template<typename T>
inline void writeUnaligned(T* ptr, T data) inline void writeUnaligned(T* ptr, T data)
{ {
static_assert(std::is_integral<T>::value, "Integer type required"); static_assert(std::is_trivially_copyable<T>::value, "T must be trivially copyable");
memcpy(ptr, &data, sizeof(T)); memcpy(ptr, &data, sizeof(T));
} }

View File

@@ -28,13 +28,12 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#pragma once
void randomx_set_huge_pages_jit(bool) void randomx_set_huge_pages_jit(bool)
{ {
} }
void randomx_set_optimized_dataset_init(int) void randomx_set_optimized_dataset_init(int)
{ {
} }

View File

@@ -24,6 +24,7 @@
#include <cstddef> #include <cstddef>
#include <cstdint> #include <cstdint>
#include "base/tools/Alignment.h"
namespace xmrig { namespace xmrig {
@@ -45,10 +46,10 @@ struct u64 {
template<typename T> template<typename T>
inline T dmi_get(const uint8_t *data) { return *reinterpret_cast<const T *>(data); } inline T dmi_get(const uint8_t *data) { return readUnaligned(reinterpret_cast<const T *>(data)); }
template<typename T> template<typename T>
inline T dmi_get(const dmi_header *h, size_t offset) { return *reinterpret_cast<const T *>(h->data + offset); } inline T dmi_get(const dmi_header *h, size_t offset) { return readUnaligned(reinterpret_cast<const T *>(h->data + offset)); }
const char *dmi_string(dmi_header *dm, size_t offset); const char *dmi_string(dmi_header *dm, size_t offset);