From: Petr Vorel <pvorel@suse.cz>
To: Vasileios Almpanis <vasileios.almpanis@virtuozzo.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v2 1/1] ssh-stress: disable resource penalties
Date: Tue, 23 Dec 2025 21:58:23 +0100 [thread overview]
Message-ID: <20251223205823.GB141917@pevik> (raw)
In-Reply-To: <20251222141331.121827-1-vasileios.almpanis@virtuozzo.com>
Hi Vasileios,
> Our tests create a number of ssh sessions in the
> background which are immediately killed. Some of
> them haven't finished the authentication stage yet
> and they close the connection incurring penalties from
> the ssh daemon.
> debug1: srclimit_penalise: active penalty for ipv4 10.0.0.1/32
> already exists, 16 seconds remaining
> Then when we try to reconnect to the daemon we are bounced
> because of the active penalty which leads to a failed test.
> ssh-stress 1 TINFO: Killing all ssh sessions
> kex_exchange_identification: read: Connection reset by peer
> Connection reset by fd00:1:1:1::2 port 58373
> ssh-stress 1 TFAIL: SSH not reachable
> From the sshd logs we can see
> debug1: srclimit_penalise: active penalty for ipv4 10.0.0.1/32
> already exists, 16 seconds remaining
> This feature was added to OpenSSH 9.8 in the 2024 release in the
> 81c1099d2 commit. Lets disable penalties for the versions that
> support them.
+1 for a nice description!
> Signed-off-by: Vasileios Almpanis <vasileios.almpanis@virtuozzo.com>
> ---
> Changes in v2:
> - Removed unnecessary parenthesis around if statements.
> ---
> testcases/network/stress/ssh/ssh-stress.sh | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
> diff --git a/testcases/network/stress/ssh/ssh-stress.sh b/testcases/network/stress/ssh/ssh-stress.sh
> index c27c27a28..d5db24835 100755
> --- a/testcases/network/stress/ssh/ssh-stress.sh
> +++ b/testcases/network/stress/ssh/ssh-stress.sh
> @@ -39,8 +39,12 @@ cleanup()
> setup()
> {
> - local port rc
> + local port rc version major minor
> + version=$(sshd -V 2>&1 | sed -nE 's/^.*OpenSSH_([0-9]+)\.([0-9]+).*$/\1 \2/p' | head -n1)
> + set -- $version
> + major=$1
> + minor=$2
> port=$(tst_rhost_run -c "tst_get_unused_port ipv${TST_IPVER} stream")
> @@ -60,6 +64,13 @@ HostKey $TST_TMPDIR/ssh_host_ecdsa_key
> HostKey $TST_TMPDIR/ssh_host_ed25519_key
> EOF
> + if [ -n "$major" ] && [ -n "$minor" ]; then
This could be simplified by assigning both to zero.
> + if [ "$major" -gt 9 ] || [ "$major" -eq 9 ] && [ "$minor" -ge 8 ]; then
This is wrong. It should be as I suggested at v1:
if [ "$major" -gt 9 ] || [ "$major" -eq 9 -a "$minor" -ge 8 ]; then
otherwise it does not work for > 9. Using () in v1 was also correct, just
unnecessary complicated.
If you agree I can merge this:
setup()
{
local port rc version
local major=0 minor=0
version=$(sshd -V 2>&1 | sed -nE 's/^.*OpenSSH_([0-9]+)\.([0-9]+).*$/\1 \2/p' | head -n1)
set -- $version
major=$1
minor=$2
...
if [ "$major" -gt 9 ] || [ "$major" -eq 9 -a "$minor" -ge 8 ]; then
cat << EOF >> sshd_config
PerSourcePenalties no
EOF
fi
(See full diff from your v2 below.)
---
Why? && and || have equal precedence (unlike C like languages where && has
higher preference):
$ echo 1 || echo 2 && echo 3
1
3
=> In C like evaluation it would be just:
1
If you wonder why, see section "Lists" in man bash(1) [1]:
A list is a sequence of one or more pipelines separated by one of
the operators ;, &, &&, or ||, and optionally terminated by one of
;, &, or <newline>.
Of these list operators, && and || have equal precedence, followed
by ; and &, which have equal precedence.
Just to double check this basic functionality works the same across POSIX shell
see section "Short-Circuit List Operators" in man dash(1) [2]:
“&&” and “||” are AND-OR list operators. “&&” executes the first
command, and then executes the second command if and only if the
exit status of the first command is zero. “||” is similar, but
executes the second command if and only if the exit status of the
first command is nonzero. “&&” and “||” both have the same
priority.
Therefore 10.1 version will not be selected in your new code:
$ major=10 minor=1; if [ "$major" -gt 9 ] || [ "$major" -eq 9 ] && [ "$minor" -ge 8 ]; then echo "found"; else echo "not found"; fi
not found
But using just 2x [ ] (the second with "-a") will behave like
$ major=10 minor=1; if [ "$major" -gt 9 ] || [ "$major" -eq 9 -a "$minor" -ge 8 ]; then echo "foo"; fi
foo
$ major=10 minor=1; if [ "$major" -gt 9 ] || [ "$major" -eq 9 -a "$minor" -ge 8 ]; then echo "found"; else echo "not found"; fi
found
Using () in v1 was correct:
$ major=10 minor=1; if [ "$major" -gt 9 ] || ([ "$major" -eq 9 ] && [ "$minor" -ge 8 ]); then echo "found"; else echo "not found"; fi
found
it just looked me unnecessary complicated, because ( ... ) executes evaluation
in a subshell (see "Grouping Commands Together" in dash(1) or "Compound
Commands" in bash(1)).
[1] https://man7.org/linux/man-pages/man1/bash.1.html
[2] https://man7.org/linux/man-pages/man1/dash.1.html
diff --git testcases/network/stress/ssh/ssh-stress.sh testcases/network/stress/ssh/ssh-stress.sh
index d5db24835d..14a4af8213 100755
--- testcases/network/stress/ssh/ssh-stress.sh
+++ testcases/network/stress/ssh/ssh-stress.sh
@@ -39,7 +39,8 @@ cleanup()
setup()
{
- local port rc version major minor
+ local port rc version
+ local major=0 minor=0
version=$(sshd -V 2>&1 | sed -nE 's/^.*OpenSSH_([0-9]+)\.([0-9]+).*$/\1 \2/p' | head -n1)
set -- $version
@@ -64,12 +65,10 @@ HostKey $TST_TMPDIR/ssh_host_ecdsa_key
HostKey $TST_TMPDIR/ssh_host_ed25519_key
EOF
- if [ -n "$major" ] && [ -n "$minor" ]; then
- if [ "$major" -gt 9 ] || [ "$major" -eq 9 ] && [ "$minor" -ge 8 ]; then
- cat << EOF >> sshd_config
+ if [ "$major" -gt 9 ] || [ "$major" -eq 9 -a "$minor" -ge 8 ]; then
+ cat << EOF >> sshd_config
PerSourcePenalties no
EOF
- fi
fi
ssh-keygen -q -N "" -t rsa -b 4096 -f $TST_TMPDIR/ssh_host_rsa_key
ssh-keygen -q -N "" -t ecdsa -f $TST_TMPDIR/ssh_host_ecdsa_key
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2025-12-23 20:58 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20251219155732.46696-1-vasileios.almpanis@virtuozzo.com>
2025-12-19 21:27 ` [LTP] [PATCH] ssh-stress: disable resource penalties Petr Vorel
2025-12-22 14:13 ` [LTP] [PATCH v2 1/1] " Vasileios Almpanis via ltp
2025-12-23 20:58 ` Petr Vorel [this message]
[not found] ` <3824feca-cd19-453f-8c06-7223375051f6@virtuozzo.com>
2025-12-24 15:06 ` Petr Vorel
2025-12-19 21:37 ` [LTP] [PATCH] " Petr Vorel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251223205823.GB141917@pevik \
--to=pvorel@suse.cz \
--cc=ltp@lists.linux.it \
--cc=vasileios.almpanis@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox