diff --git a/package/network/services/dropbear/patches/001-fix-MAX_UNAUTH_CLIENTS-regression.patch b/package/network/services/dropbear/patches/001-fix-MAX_UNAUTH_CLIENTS-regression.patch new file mode 100644 index 0000000000..e0dca544ec --- /dev/null +++ b/package/network/services/dropbear/patches/001-fix-MAX_UNAUTH_CLIENTS-regression.patch @@ -0,0 +1,134 @@ +From: Matt Johnston +Date: Wed, 8 Jun 2022 21:26:20 +0800 +Subject: Fix MAX_UNAUTH_CLIENTS regression + +Since re-exec change in 2022.82 Dropbear count +treat authenticated sessions towards the unauthenticated +session limit. This is fixed by passing the childpipe FD +through to the re-execed process. +--- + runopts.h | 5 +++-- + svr-main.c | 21 +++++++++++---------- + svr-runopts.c | 15 ++++++++++++--- + 3 files changed, 26 insertions(+), 15 deletions(-) + +--- a/runopts.h ++++ b/runopts.h +@@ -79,8 +79,9 @@ typedef struct svr_runopts { + char *addresses[DROPBEAR_MAX_PORTS]; + + int inetdmode; +- /* Hidden "-2" flag indicates it's re-executing itself */ +- int reexec_child; ++ /* Hidden "-2 childpipe_fd" flag indicates it's re-executing itself, ++ stores the childpipe preauth file descriptor. Set to -1 otherwise. */ ++ int reexec_childpipe; + + /* Flags indicating whether to use ipv4 and ipv6 */ + /* not used yet +--- a/svr-main.c ++++ b/svr-main.c +@@ -71,7 +71,7 @@ int main(int argc, char ** argv) + #endif + + #if DROPBEAR_DO_REEXEC +- if (svr_opts.reexec_child) { ++ if (svr_opts.reexec_childpipe >= 0) { + #ifdef PR_SET_NAME + /* Fix the "Name:" in /proc/pid/status, otherwise it's + a FD number from fexecve. +@@ -102,7 +102,7 @@ static void main_inetd() { + + seedrandom(); + +- if (!svr_opts.reexec_child) { ++ if (svr_opts.reexec_childpipe < 0) { + /* In case our inetd was lax in logging source addresses */ + get_socket_address(0, NULL, NULL, &host, &port, 0); + dropbear_log(LOG_INFO, "Child connection from %s:%s", host, port); +@@ -115,10 +115,8 @@ static void main_inetd() { + setsid(); + } + +- /* Start service program +- * -1 is a dummy childpipe, just something we can close() without +- * mattering. */ +- svr_session(0, -1); ++ /* -1 for childpipe in the inetd case is discarded */ ++ svr_session(0, svr_opts.reexec_childpipe); + + /* notreached */ + } +@@ -347,9 +345,10 @@ static void main_noinetd(int argc, char + + if (execfd >= 0) { + #if DROPBEAR_DO_REEXEC +- /* Add "-2" to the args and re-execute ourself. */ +- char **new_argv = m_malloc(sizeof(char*) * (argc+3)); +- int pos0 = 0, new_argc = argc+1; ++ /* Add "-2 childpipe[1]" to the args and re-execute ourself. */ ++ char **new_argv = m_malloc(sizeof(char*) * (argc+4)); ++ char buf[10]; ++ int pos0 = 0, new_argc = argc+2; + + /* We need to specially handle "dropbearmulti dropbear". */ + if (multipath) { +@@ -359,7 +358,9 @@ static void main_noinetd(int argc, char + } + + memcpy(&new_argv[pos0], argv, sizeof(char*) * argc); +- new_argv[new_argc-1] = "-2"; ++ new_argv[new_argc-2] = "-2"; ++ snprintf(buf, sizeof(buf), "%d", childpipe[1]); ++ new_argv[new_argc-1] = buf; + new_argv[new_argc] = NULL; + + if ((dup2(childsock, STDIN_FILENO) < 0)) { +--- a/svr-runopts.c ++++ b/svr-runopts.c +@@ -138,6 +138,7 @@ void svr_getopts(int argc, char ** argv) + char* keepalive_arg = NULL; + char* idle_timeout_arg = NULL; + char* maxauthtries_arg = NULL; ++ char* reexec_fd_arg = NULL; + char* keyfile = NULL; + char c; + #if DROPBEAR_PLUGIN +@@ -175,6 +176,7 @@ void svr_getopts(int argc, char ** argv) + svr_opts.pubkey_plugin_options = NULL; + #endif + svr_opts.pass_on_env = 0; ++ svr_opts.reexec_childpipe = -1; + + #ifndef DISABLE_ZLIB + opts.compress_mode = DROPBEAR_COMPRESS_DELAYED; +@@ -250,12 +252,12 @@ void svr_getopts(int argc, char ** argv) + #if DROPBEAR_DO_REEXEC && NON_INETD_MODE + /* For internal use by re-exec */ + case '2': +- svr_opts.reexec_child = 1; ++ next = &reexec_fd_arg; + break; + #endif + case 'p': +- nextisport = 1; +- break; ++ nextisport = 1; ++ break; + case 'P': + next = &svr_opts.pidfile; + break; +@@ -426,6 +428,13 @@ void svr_getopts(int argc, char ** argv) + dropbear_log(LOG_INFO, "Forced command set to '%s'", svr_opts.forced_command); + } + ++ if (reexec_fd_arg) { ++ if (m_str_to_uint(reexec_fd_arg, &svr_opts.reexec_childpipe) == DROPBEAR_FAILURE ++ || svr_opts.reexec_childpipe < 0) { ++ dropbear_exit("Bad -2"); ++ } ++ } ++ + #if INETD_MODE + if (svr_opts.inetdmode && ( + opts.usingsyslog == 0 diff --git a/package/network/utils/ethtool/Makefile b/package/network/utils/ethtool/Makefile index 5182c55331..dffcab357c 100644 --- a/package/network/utils/ethtool/Makefile +++ b/package/network/utils/ethtool/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ethtool -PKG_VERSION:=5.16 +PKG_VERSION:=5.18 PKG_RELEASE:=1 PKG_MAINTAINER:=Felix Fietkau PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@KERNEL/software/network/ethtool -PKG_HASH:=aa2fef1936dd4a11755dfa0bdb93f0ec5bea45208d27c9754bc3abe1aa42c1cb +PKG_HASH:=9577b2ffbce710b659fb239598ec92bced1ca400ca0f1286762bfa44e4784270 PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:=COPYING diff --git a/package/system/fstools/Makefile b/package/system/fstools/Makefile index 4668338c48..e39e44b893 100644 --- a/package/system/fstools/Makefile +++ b/package/system/fstools/Makefile @@ -79,14 +79,14 @@ define Package/block-mount SECTION:=base CATEGORY:=Base system TITLE:=Block device mounting and checking - DEPENDS:=+ubox +libubox +libuci +libblobmsg-json +libjson-c + DEPENDS:=+ubox +libubox +libuci +libblobmsg-json +libjson-c +fstools endef define Package/blockd SECTION:=base CATEGORY:=Base system TITLE:=Block device automounting - DEPENDS:=+block-mount +fstools +libubus +kmod-fs-autofs4 +libblobmsg-json +libjson-c + DEPENDS:=+block-mount +libubus +kmod-fs-autofs4 +libblobmsg-json +libjson-c endef define Package/fstools/install diff --git a/package/system/fstools/patches/100-fstools-support-extroot-for-non-MTD-rootfs_data.patch b/package/system/fstools/patches/100-fstools-support-extroot-for-non-MTD-rootfs_data.patch new file mode 100644 index 0000000000..f7a4ad3c8e --- /dev/null +++ b/package/system/fstools/patches/100-fstools-support-extroot-for-non-MTD-rootfs_data.patch @@ -0,0 +1,123 @@ +From: Qi Liu + +In order to support extroot, block extroot command has to be able to +discover and properly mount the rootfs_data volume in order to discover +the extroot volume. Currently this process can only discover MTD devices. +This patch leverages libfstools in a similar way as mount_root to +discover, initialize, and mount rootfs_data volume. It would enable any +device with non-MTD rootfs_data volume to support extroot, including x86. + +Signed-off-by: Qi Liu +--- + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -77,9 +77,9 @@ INSTALL(TARGETS blockd RUNTIME DESTINATION sbin) + ADD_EXECUTABLE(block block.c probe.c probe-libblkid.c) + IF(DEFINED CMAKE_UBIFS_EXTROOT) + ADD_DEFINITIONS(-DUBIFS_EXTROOT) +- TARGET_LINK_LIBRARIES(block blkid-tiny dl uci ubox ubus blobmsg_json ubi-utils ${json}) ++ TARGET_LINK_LIBRARIES(block blkid-tiny dl fstools uci ubox ubus blobmsg_json ubi-utils ${json}) + ELSE(DEFINED CMAKE_UBIFS_EXTROOT) +- TARGET_LINK_LIBRARIES(block blkid-tiny dl uci ubox ubus blobmsg_json ${json}) ++ TARGET_LINK_LIBRARIES(block blkid-tiny dl fstools uci ubox ubus blobmsg_json ${json}) + ENDIF(DEFINED CMAKE_UBIFS_EXTROOT) + INSTALL(TARGETS block RUNTIME DESTINATION sbin) + +--- a/block.c ++++ b/block.c +@@ -46,6 +46,9 @@ + #include + #include + ++#include "libfstools/fstype.h" ++#include "libfstools/volume.h" ++ + #include "probe.h" + + #define AUTOFS_MOUNT_PATH "/tmp/run/blockd/" +@@ -1600,6 +1603,44 @@ static int main_extroot(int argc, char **argv) + } + #endif + ++ /* Find volume using libfstools */ ++ struct volume *data = volume_find("rootfs_data"); ++ if (data) { ++ volume_init(data); ++ ++ switch (volume_identify(data)) { ++ case FS_EXT4: { ++ char cfg[] = "/tmp/ext4_cfg"; ++ ++ /* Mount volume and try extroot (using fstab from that vol) */ ++ mkdir_p(cfg, 0755); ++ if (!mount(data->blk, cfg, "ext4", MS_NOATIME, NULL)) { ++ err = mount_extroot(cfg); ++ umount2(cfg, MNT_DETACH); ++ } ++ if (err < 0) ++ rmdir("/tmp/overlay"); ++ rmdir(cfg); ++ return err; ++ } ++ ++ case FS_F2FS: { ++ char cfg[] = "/tmp/f2fs_cfg"; ++ ++ /* Mount volume and try extroot (using fstab from that vol) */ ++ mkdir_p(cfg, 0755); ++ if (!mount(data->blk, cfg, "f2fs", MS_NOATIME, NULL)) { ++ err = mount_extroot(cfg); ++ umount2(cfg, MNT_DETACH); ++ } ++ if (err < 0) ++ rmdir("/tmp/overlay"); ++ rmdir(cfg); ++ return err; ++ } ++ } ++ } ++ + /* As a last resort look for /etc/config/fstab on "rootfs" partition */ + return mount_extroot(NULL); + } +--- /dev/null ++++ b/libfstools/fstype.h +@@ -0,0 +1,13 @@ ++#ifndef _FS_TYPE_H__ ++#define _FS_TYPE_H__ ++enum { ++ FS_NONE, ++ FS_SNAPSHOT, ++ FS_JFFS2, ++ FS_DEADCODE, ++ FS_UBIFS, ++ FS_F2FS, ++ FS_EXT4, ++ FS_TARGZ, ++}; ++#endif +--- a/libfstools/libfstools.h ++++ b/libfstools/libfstools.h +@@ -18,20 +18,10 @@ + #include + #include + #include ++#include "fstype.h" + + struct volume; + +-enum { +- FS_NONE, +- FS_SNAPSHOT, +- FS_JFFS2, +- FS_DEADCODE, +- FS_UBIFS, +- FS_F2FS, +- FS_EXT4, +- FS_TARGZ, +-}; +- + enum fs_state { + FS_STATE_UNKNOWN, + FS_STATE_PENDING,