diff options
author | Vsevolod Stakhov <vsevolod@rspamd.com> | 2022-11-11 20:34:51 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rspamd.com> | 2022-11-11 20:37:02 +0000 |
commit | 068714f9f5a96fbd94560211cec75775ee023d02 (patch) | |
tree | 8fb3e1e8b4db523d356f6a138a9bd1a2e2f94df5 /src | |
parent | b9b54acce5e3ffaa1ba2af8868dfd962960ab315 (diff) | |
download | rspamd-068714f9f5a96fbd94560211cec75775ee023d02.tar.gz rspamd-068714f9f5a96fbd94560211cec75775ee023d02.zip |
[CritFix] Deserialise hyperscan to the page-aligned space to prevent alignment issues
Issue: #4329
Diffstat (limited to 'src')
-rw-r--r-- | src/libserver/hyperscan_tools.cxx | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/libserver/hyperscan_tools.cxx b/src/libserver/hyperscan_tools.cxx index 6187208a9..96366067d 100644 --- a/src/libserver/hyperscan_tools.cxx +++ b/src/libserver/hyperscan_tools.cxx @@ -306,7 +306,15 @@ auto load_cached_hs_file(const char *fname, std::int64_t offset = 0) -> tl::expe msg_debug_hyperscan_lambda("multipattern: create new database in %s; %Hz size", tmpfile_pattern.data(), unserialized_size); void *buf; - posix_memalign(&buf, 16, unserialized_size); +#ifdef HAVE_GETPAGESIZE + auto page_size = getpagesize(); +#else + auto page_size = sysconf(_SC_PAGESIZE); +#endif + if (page_size == -1) { + page_size = 4096; + } + posix_memalign(&buf, page_size, unserialized_size); if (buf == nullptr) { return tl::make_unexpected(error {"Cannot allocate memory", errno, error_category::CRITICAL }); } |