Message ID | 20211020124220.489260-1-snemec@redhat.com |
---|---|
State | Accepted |
Delegated to: | Pablo Neira |
Headers | show |
Series | [nft] tests: cover baecd1cf2685 ("segtree: Fix segfault when restoring a huge interval set") | expand |
Hi Stepan, On Wed, Oct 20, 2021 at 02:42:20PM +0200, Štěpán Němec wrote: > Test inspired by [1] with both the set and stack size reduced by the > same power of 2, to preserve the (pre-baecd1cf2685) segfault on one > hand, and make the test successfully complete (post-baecd1cf2685) in a > few seconds even on weaker hardware on the other. > > (The reason I stopped at 128kB stack size is that with 64kB I was > getting segfaults even with baecd1cf2685 applied.) > > [1] https://bugzilla.redhat.com/show_bug.cgi?id=1908127 > > Signed-off-by: Štěpán Němec <snemec@redhat.com> > Helped-by: Phil Sutter <phil@nwl.cc> Thanks for the patch, just one remark: [...] > +cat >>"$ruleset_file" <<\EOF ~~~ Is this backslash a typo or intentional? Cheers, Phil
On Wed, 20 Oct 2021 15:13:54 +0200 Phil Sutter wrote: > Thanks for the patch, just one remark: > > [...] >> +cat >>"$ruleset_file" <<\EOF > ~~~ > Is this backslash a typo or intentional? It instructs the shell not to perform expansion on the heredoc lines (which would include interpreting '$big_set' as a shell variable). https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_04
On Wed, Oct 20, 2021 at 03:38:01PM +0200, Štěpán Němec wrote: > On Wed, 20 Oct 2021 15:13:54 +0200 > Phil Sutter wrote: > > > Thanks for the patch, just one remark: > > > > [...] > >> +cat >>"$ruleset_file" <<\EOF > > ~~~ > > Is this backslash a typo or intentional? > > It instructs the shell not to perform expansion on the heredoc lines > (which would include interpreting '$big_set' as a shell variable). Ah, I missed the part about quoting parts of 'word'. :) Patch applied, thanks! Cheers, Phil
diff --git a/tests/shell/testcases/sets/0068interval_stack_overflow_0 b/tests/shell/testcases/sets/0068interval_stack_overflow_0 new file mode 100755 index 000000000000..134282de2826 --- /dev/null +++ b/tests/shell/testcases/sets/0068interval_stack_overflow_0 @@ -0,0 +1,29 @@ +#!/bin/bash + +set -e + +ruleset_file=$(mktemp) + +trap 'rm -f "$ruleset_file"' EXIT + +{ + echo 'define big_set = {' + for ((i = 1; i < 255; i++)); do + for ((j = 1; j < 80; j++)); do + echo "10.0.$i.$j," + done + done + echo '10.1.0.0/24 }' +} >"$ruleset_file" + +cat >>"$ruleset_file" <<\EOF +table inet test68_table { + set test68_set { + type ipv4_addr + flags interval + elements = { $big_set } + } +} +EOF + +( ulimit -s 128 && "$NFT" -f "$ruleset_file" )
Test inspired by [1] with both the set and stack size reduced by the same power of 2, to preserve the (pre-baecd1cf2685) segfault on one hand, and make the test successfully complete (post-baecd1cf2685) in a few seconds even on weaker hardware on the other. (The reason I stopped at 128kB stack size is that with 64kB I was getting segfaults even with baecd1cf2685 applied.) [1] https://bugzilla.redhat.com/show_bug.cgi?id=1908127 Signed-off-by: Štěpán Němec <snemec@redhat.com> Helped-by: Phil Sutter <phil@nwl.cc> --- .../sets/0068interval_stack_overflow_0 | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100755 tests/shell/testcases/sets/0068interval_stack_overflow_0 base-commit: 2139913694a9850c9160920b2c638aac4828f9bb