aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2022-11-11 20:34:51 +0000
committerVsevolod Stakhov <vsevolod@rspamd.com>2022-11-11 20:37:02 +0000
commit068714f9f5a96fbd94560211cec75775ee023d02 (patch)
tree8fb3e1e8b4db523d356f6a138a9bd1a2e2f94df5 /src
parentb9b54acce5e3ffaa1ba2af8868dfd962960ab315 (diff)
downloadrspamd-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.cxx10
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 });
}