Blame SOURCES/0017-tests-cover-baecd1cf2685-segtree-Fix-segfault-when-r.patch

954d1a
From 2c4a6a4f1d51358a196a7039c41b7d50df656985 Mon Sep 17 00:00:00 2001
954d1a
From: =?UTF-8?q?=C5=A0t=C4=9Bp=C3=A1n=20N=C4=9Bmec?= <snemec@redhat.com>
954d1a
Date: Wed, 20 Oct 2021 14:42:20 +0200
954d1a
Subject: [PATCH] tests: cover baecd1cf2685 ("segtree: Fix segfault when
954d1a
 restoring a huge interval set")
954d1a
MIME-Version: 1.0
954d1a
Content-Type: text/plain; charset=UTF-8
954d1a
Content-Transfer-Encoding: 8bit
954d1a
954d1a
Test inspired by [1] with both the set and stack size reduced by the
954d1a
same power of 2, to preserve the (pre-baecd1cf2685) segfault on one
954d1a
hand, and make the test successfully complete (post-baecd1cf2685) in a
954d1a
few seconds even on weaker hardware on the other.
954d1a
954d1a
(The reason I stopped at 128kB stack size is that with 64kB I was
954d1a
getting segfaults even with baecd1cf2685 applied.)
954d1a
954d1a
[1] https://bugzilla.redhat.com/show_bug.cgi?id=1908127
954d1a
954d1a
Signed-off-by: Štěpán Němec <snemec@redhat.com>
954d1a
Helped-by: Phil Sutter <phil@nwl.cc>
954d1a
Signed-off-by: Phil Sutter <phil@nwl.cc>
954d1a
(cherry picked from commit d8ccad2a2b73c4189934eb5fd0e3d096699b5043)
954d1a
---
954d1a
 .../sets/0068interval_stack_overflow_0        | 29 +++++++++++++++++++
954d1a
 1 file changed, 29 insertions(+)
954d1a
 create mode 100755 tests/shell/testcases/sets/0068interval_stack_overflow_0
954d1a
954d1a
diff --git a/tests/shell/testcases/sets/0068interval_stack_overflow_0 b/tests/shell/testcases/sets/0068interval_stack_overflow_0
954d1a
new file mode 100755
954d1a
index 0000000000000..134282de28268
954d1a
--- /dev/null
954d1a
+++ b/tests/shell/testcases/sets/0068interval_stack_overflow_0
954d1a
@@ -0,0 +1,29 @@
954d1a
+#!/bin/bash
954d1a
+
954d1a
+set -e
954d1a
+
954d1a
+ruleset_file=$(mktemp)
954d1a
+
954d1a
+trap 'rm -f "$ruleset_file"' EXIT
954d1a
+
954d1a
+{
954d1a
+	echo 'define big_set = {'
954d1a
+	for ((i = 1; i < 255; i++)); do
954d1a
+		for ((j = 1; j < 80; j++)); do
954d1a
+			echo "10.0.$i.$j,"
954d1a
+		done
954d1a
+	done
954d1a
+	echo '10.1.0.0/24 }'
954d1a
+} >"$ruleset_file"
954d1a
+
954d1a
+cat >>"$ruleset_file" <<\EOF
954d1a
+table inet test68_table {
954d1a
+	set test68_set {
954d1a
+		type ipv4_addr
954d1a
+		flags interval
954d1a
+		elements = { $big_set }
954d1a
+	}
954d1a
+}
954d1a
+EOF
954d1a
+
954d1a
+( ulimit -s 128 && "$NFT" -f "$ruleset_file" )
954d1a
-- 
954d1a
2.33.0
954d1a