aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@FreeBSD.org>2022-11-14 21:17:10 +0000
committerVsevolod Stakhov <vsevolod@FreeBSD.org>2022-11-14 21:17:10 +0000
commit7a34813aa2b37410eba1716a17198e7325292249 (patch)
tree9a5f8ffe67215e833d524def1cba8d4830ab9498
parent835b479670531fb700f0f3aad9333f121e144852 (diff)
mail/rspamd: Backport important fixes from the upstream
-rw-r--r--mail/rspamd/Makefile1
-rw-r--r--mail/rspamd/files/patch-src_libserver_hyperscan_tools.cxx21
-rw-r--r--mail/rspamd/files/patch-src_libutil_cxx_file_util.cxx22
-rw-r--r--mail/rspamd/files/pkg-message.in10
4 files changed, 54 insertions, 0 deletions
diff --git a/mail/rspamd/Makefile b/mail/rspamd/Makefile
index 2e86b69f48b9..a3810ab16f4e 100644
--- a/mail/rspamd/Makefile
+++ b/mail/rspamd/Makefile
@@ -1,5 +1,6 @@
PORTNAME= rspamd
PORTVERSION= 3.4
+PORTREVISION= 1
CATEGORIES= mail
MAINTAINER= vsevolod@FreeBSD.org
diff --git a/mail/rspamd/files/patch-src_libserver_hyperscan_tools.cxx b/mail/rspamd/files/patch-src_libserver_hyperscan_tools.cxx
new file mode 100644
index 000000000000..72eb1173ae88
--- /dev/null
+++ b/mail/rspamd/files/patch-src_libserver_hyperscan_tools.cxx
@@ -0,0 +1,21 @@
+diff --git a/src/libserver/hyperscan_tools.cxx b/src/libserver/hyperscan_tools.cxx
+index 6187208a9..96366067d 100644
+--- src/libserver/hyperscan_tools.cxx
++++ 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 });
+ }
diff --git a/mail/rspamd/files/patch-src_libutil_cxx_file_util.cxx b/mail/rspamd/files/patch-src_libutil_cxx_file_util.cxx
new file mode 100644
index 000000000000..f7461da0c82b
--- /dev/null
+++ b/mail/rspamd/files/patch-src_libutil_cxx_file_util.cxx
@@ -0,0 +1,22 @@
+diff --git a/src/libutil/cxx/file_util.cxx b/src/libutil/cxx/file_util.cxx
+index e3b3a2605..4536fa97b 100644
+--- src/libutil/cxx/file_util.cxx
++++ src/libutil/cxx/file_util.cxx
+@@ -198,7 +198,7 @@ auto raii_mmaped_file::mmap_shared(raii_file &&file,
+ }
+ /* Update stat on file to ensure it is up-to-date */
+ file.update_stat();
+- map = mmap(nullptr, file.get_size() - offset, flags, MAP_SHARED, file.get_fd(), offset);
++ map = mmap(nullptr, (std::size_t)(file.get_size() - offset), flags, MAP_SHARED, file.get_fd(), offset);
+
+ if (map == MAP_FAILED) {
+ return tl::make_unexpected(error { fmt::format("cannot mmap file {}: {}",
+@@ -206,7 +206,7 @@ auto raii_mmaped_file::mmap_shared(raii_file &&file,
+
+ }
+
+- return raii_mmaped_file{std::move(file), map, file.get_size() - offset};
++ return raii_mmaped_file{std::move(file), map, (std::size_t)(file.get_size() - offset)};
+ }
+
+ auto raii_mmaped_file::mmap_shared(const char *fname, int open_flags,
diff --git a/mail/rspamd/files/pkg-message.in b/mail/rspamd/files/pkg-message.in
index 927f2a5b46ac..52b6ff711785 100644
--- a/mail/rspamd/files/pkg-message.in
+++ b/mail/rspamd/files/pkg-message.in
@@ -13,5 +13,15 @@
You can edit %%ETCDIR%%/rspamd.newsyslog.conf
to change log file rotation configuration.
EOM
+},
+{ type: upgrade
+ maximum_version: 3.4
+ minimum_version: 3.3
+ message: <<EOM
+Due to the issues with Hyperscan alignment, it is recommended to remove the
+existing cached files that might cause troubles from /var/db/rspamd by using the
+following command: "find /var/db/rspamd/ -type f -name '*.unser' -delete"
+This action is needed merely for this particular upgrade.
+EOM
}
]