Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package tinyssh for openSUSE:Factory checked in at 2026-06-28 21:52:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/tinyssh (Old) and /work/SRC/openSUSE:Factory/.tinyssh.new.11887 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "tinyssh" Sun Jun 28 21:52:09 2026 rev:13 rq:1362234 version:20260601 Changes: -------- --- /work/SRC/openSUSE:Factory/tinyssh/tinyssh.changes 2026-04-11 22:31:37.401271963 +0200 +++ /work/SRC/openSUSE:Factory/.tinyssh.new.11887/tinyssh.changes 2026-06-28 21:52:24.619291498 +0200 @@ -1,0 +2,12 @@ +Sun Jun 28 18:20:00 UTC 2026 - Dirk Müller <[email protected]> + +- update to 20260601: + * Fixed validation of client-controlled channel parameters. + * Fixed packet buffer bounds in plain-text and + chacha20-poly1305 packet handling. + * Fixed truncated log messages in subprocess_auth. + * Forced a minimal `maxpacket` value of 32 when opening + channels. + * Fixed README.md systemd variable substitution example. + +------------------------------------------------------------------- Old: ---- tinyssh-20260401.tar.gz tinyssh-20260401.tar.gz.asc New: ---- tinyssh-20260601.tar.gz tinyssh-20260601.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ tinyssh.spec ++++++ --- /var/tmp/diff_new_pack.keylOM/_old 2026-06-28 21:52:25.075306856 +0200 +++ /var/tmp/diff_new_pack.keylOM/_new 2026-06-28 21:52:25.075306856 +0200 @@ -17,7 +17,7 @@ Name: tinyssh -Version: 20260401 +Version: 20260601 Release: 0 Summary: A minimalistic SSH server which implements only a subset of SSHv2 features License: CC0-1.0 ++++++ tinyssh-20260401.tar.gz -> tinyssh-20260601.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinyssh-20260401/CHANGELOG.md new/tinyssh-20260601/CHANGELOG.md --- old/tinyssh-20260401/CHANGELOG.md 2026-04-01 06:24:44.000000000 +0200 +++ new/tinyssh-20260601/CHANGELOG.md 2026-06-01 06:21:31.000000000 +0200 @@ -1,3 +1,10 @@ +### 20260601 +- Fixed validation of client-controlled channel parameters. +- Fixed packet buffer bounds in plain-text and chacha20-poly1305 packet handling. +- Fixed truncated log messages in subprocess_auth. +- Forced a minimal `maxpacket` value of 32 when opening channels. +- Fixed README.md systemd variable substitution example. + ### 20260401 - Fixed session handling, now rejects out-of-order or duplicate channel requests. - Fixed connection shutdown, timeout handling and subprocess waiting edge cases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinyssh-20260401/README.md new/tinyssh-20260601/README.md --- old/tinyssh-20260401/README.md 2026-04-01 06:24:44.000000000 +0200 +++ new/tinyssh-20260601/README.md 2026-06-01 06:21:31.000000000 +0200 @@ -17,7 +17,7 @@ * beta(updated): 2018.01.01 - ????.??.?? (ready for production use) * stable: expected ????.??.?? - (ready for production use - including post-quantum crypto) -### Current release (20260401) ### +### Current release (20260601) ### * has 74260 words of code * beta release @@ -64,7 +64,7 @@ [Service] ExecStartPre=-/usr/sbin/tinysshd-makekey -q /etc/tinyssh/sshkeydir EnvironmentFile=-/etc/default/tinysshd - ExecStart=/usr/sbin/tinysshd ${TINYSSHDOPTS} -- /etc/tinyssh/sshkeydir + ExecStart=/usr/sbin/tinysshd $TINYSSHDOPTS -- /etc/tinyssh/sshkeydir KillMode=process SuccessExitStatus=111 StandardInput=socket diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinyssh-20260401/channel.c new/tinyssh-20260601/channel.c --- old/tinyssh-20260401/channel.c 2026-04-01 06:24:44.000000000 +0200 +++ new/tinyssh-20260601/channel.c 2026-06-01 06:21:31.000000000 +0200 @@ -54,8 +54,7 @@ struct buf b = {channel.buf0, 0, CHANNEL_BUFSIZE}; if (!localwindow) bug_inval(); - if (!maxpacket) bug_inval(); - if (!remotewindow) bug_inval(); + if (!maxpacket) bug_proto(); if (channel.maxpacket != 0) return 0; if (channel.pid != 0) return 0; @@ -224,6 +223,7 @@ if (!buf || len < 0) bug_inval(); if (channel.len0 + len > CHANNEL_BUFSIZE) bug_nomem(); + if ((crypto_uint32) len > channel.localwindow) bug_proto(); byte_copy(channel.buf0 + channel.len0, len, buf); channel.len0 += len; @@ -473,6 +473,10 @@ crypto_uint32 channel_getid(void) { return channel.id; } crypto_uint32 channel_getlocalwindow(void) { return channel.localwindow; } void channel_incrementremotewindow(crypto_uint32 x) { + if (x > 0xffffffffUL - channel.remotewindow) bug_proto(); channel.remotewindow += x; } -void channel_incrementlocalwindow(crypto_uint32 x) { channel.localwindow += x; } +void channel_incrementlocalwindow(crypto_uint32 x) { + if (x > 0xffffffffUL - channel.localwindow) bug(); + channel.localwindow += x; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinyssh-20260401/old/tinyssh-tests/channeltest.c new/tinyssh-20260601/old/tinyssh-tests/channeltest.c --- old/tinyssh-20260401/old/tinyssh-tests/channeltest.c 2026-04-01 06:24:44.000000000 +0200 +++ new/tinyssh-20260601/old/tinyssh-tests/channeltest.c 2026-06-01 06:21:31.000000000 +0200 @@ -249,7 +249,7 @@ run_mustpass(testopen1); run_mustfail(testopen2); run_mustfail(testopen3); - run_mustfail(testopen4); + /*run_mustfail(testopen4);*/ run_mustfail(testtermopen1); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinyssh-20260401/old/tinyssh-tests/subprocess_authtest.c new/tinyssh-20260601/old/tinyssh-tests/subprocess_authtest.c --- old/tinyssh-20260401/old/tinyssh-tests/subprocess_authtest.c 2026-04-01 06:24:44.000000000 +0200 +++ new/tinyssh-20260601/old/tinyssh-tests/subprocess_authtest.c 2026-06-01 06:21:31.000000000 +0200 @@ -475,16 +475,16 @@ run(test_path_authorizedkeys_perm1, "d1/authorized_keys (access denied)"); run(test_path_authorizedkeys_perm2, "d1/authorized_keys (access denied)"); run(test_path_authorizedkeys_perm3, "d1/authorized_keys (access denied)"); - run(test_path_dir_perm1, "d1/ (access denied)"); - run(test_path_dir_perm2, "d1/ (access denied)"); - run(test_path_dir_perm3, "d1/ (access denied)"); - run(test_path_dir2_perm1, "d1/d2/ (access denied)"); - run(test_path_dir2_perm2, "d1/d2/ (access denied)"); - run(test_path_dir2_perm3, "d1/d2/ (access denied)"); - run(test_path_dir3_perm1, "d1/ (access denied)"); - run(test_path_dir3_perm2, "d1/ (access denied)"); - run(test_path_dir3_perm3, "d1/ (access denied)"); - run(test_path_dir_symlink, "d1/ (access denied)"); + run(test_path_dir_perm1, "d1 (access denied)"); + run(test_path_dir_perm2, "d1 (access denied)"); + run(test_path_dir_perm3, "d1 (access denied)"); + run(test_path_dir2_perm1, "d1/d2 (access denied)"); + run(test_path_dir2_perm2, "d1/d2 (access denied)"); + run(test_path_dir2_perm3, "d1/d2 (access denied)"); + run(test_path_dir3_perm1, "d1 (access denied)"); + run(test_path_dir3_perm2, "d1 (access denied)"); + run(test_path_dir3_perm3, "d1 (access denied)"); + run(test_path_dir_symlink, "d1 (access denied)"); log_init(-1, "xxx", 1, 0); test_authorizedkeys_ne(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinyssh-20260401/packet_channel_open.c new/tinyssh-20260601/packet_channel_open.c --- old/tinyssh-20260401/packet_channel_open.c 2026-04-01 06:24:44.000000000 +0200 +++ new/tinyssh-20260601/packet_channel_open.c 2026-06-01 06:21:31.000000000 +0200 @@ -36,6 +36,7 @@ pos = packetparser_uint32(b1->buf, b1->len, pos, &maxpacket); /* uint32 maximum packet size */ if (maxpacket > PACKET_LIMIT) maxpacket = PACKET_LIMIT; + if (maxpacket < 32) maxpacket = 32; if (str_equaln(chan, chanlen, "session")) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinyssh-20260401/packet_get.c new/tinyssh-20260601/packet_get.c --- old/tinyssh-20260401/packet_get.c 2026-04-01 06:24:44.000000000 +0200 +++ new/tinyssh-20260601/packet_get.c 2026-06-01 06:21:31.000000000 +0200 @@ -49,8 +49,8 @@ if (len <= 0) bug_proto(); buf_put(b, recvbuf->buf + PACKET_ZEROBYTES + 5, len); - byte_copy(pp, l - packet_length + 4, pp + packet_length + 4); - purge(pp + l - packet_length + 4, packet_length + 4); + byte_copy(pp, l - packet_length - 4, pp + packet_length + 4); + purge(pp + l - packet_length - 4, packet_length + 4); recvbuf->len -= packet_length + 4; packet.receivepacketid++; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinyssh-20260401/packet_unimplemented.c new/tinyssh-20260601/packet_unimplemented.c --- old/tinyssh-20260401/packet_unimplemented.c 2026-04-01 06:24:44.000000000 +0200 +++ new/tinyssh-20260601/packet_unimplemented.c 2026-06-01 06:21:31.000000000 +0200 @@ -15,7 +15,7 @@ char strnum[NUMTOSTR_LEN]; - /* note that b->buf[0] contains packetid */ + /* note that b->buf[0] contains the SSH message type */ log_d3("packet=", numtostr(strnum, b->buf[0]), ", sending SSH_MSG_UNIMPLEMENTED message"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinyssh-20260401/sshcrypto_cipher_chachapoly.c new/tinyssh-20260601/sshcrypto_cipher_chachapoly.c --- old/tinyssh-20260401/sshcrypto_cipher_chachapoly.c 2026-04-01 06:24:44.000000000 +0200 +++ new/tinyssh-20260601/sshcrypto_cipher_chachapoly.c 2026-06-01 06:21:31.000000000 +0200 @@ -120,9 +120,9 @@ pp = recvbuf->buf + PACKET_ZEROBYTES; l = recvbuf->len - PACKET_ZEROBYTES; - byte_copy(pp, l - packet.packet_length + AB + 4, + byte_copy(pp, l - packet.packet_length - AB - 4, pp + packet.packet_length + AB + 4); - purge(pp + l - packet.packet_length + AB + 4, + purge(pp + l - packet.packet_length - AB - 4, packet.packet_length + AB + 4); recvbuf->len -= packet.packet_length + AB + 4; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinyssh-20260401/subprocess_auth.c new/tinyssh-20260601/subprocess_auth.c --- old/tinyssh-20260401/subprocess_auth.c 2026-04-01 06:24:44.000000000 +0200 +++ new/tinyssh-20260601/subprocess_auth.c 2026-06-01 06:21:31.000000000 +0200 @@ -55,31 +55,37 @@ } else { if (stat(d, &st) == -1) { - log_w4("auth: unable to stat directory: ", d, "/", f); + log_w2("auth: unable to stat directory: ", d); e = 1; } if (e == 0 && !S_ISDIR(st.st_mode)) { errno = ENOTDIR; - log_w4("auth: unable to stat directory: ", d, "/", f); + log_w2("auth: not a directory: ", d); e = 1; } } if (e == 0 && (st.st_mode & 022) != 0) { errno = EACCES; - log_w4("auth: bad mode: directory writable by group or others: ", d, - "/", f); + if (f) + log_w4("auth: bad mode: writable by group or others: ", d, "/", + f); + else + log_w2("auth: bad mode: writable by group or others: ", d); e = 1; } if (e == 0 && st.st_uid != uid && st.st_uid != 0) { errno = EACCES; - log_w4("auth: bad owner: ", d, "/", f); + if (f) log_w4("auth: bad owner: ", d, "/", f); + else log_w2("auth: bad owner: ", d); e = 1; } if (e) *err = 1; - else + else if (f) log_d4("auth: path: ok: ", d, "/", f); + else + log_d2("auth: path: ok: ", d); } int subprocess_auth_checkpath_(char *path, long long pathlen, uid_t uid) {
