changelog:
https://busybox.net/news.html
remove upstreamed patches:
001-fix-non-x86-build.patch
002-upstream-fix.hexdump.patch
003-hexdump-fix-regression-for-unit16-on-big-endian-systems.patch
see https://github.com/openwrt/openwrt/pull/17107 for updating config
Config refresh:
Refresh commands, run after busybox is first built once, slash or lack of slash at end of path matters!:
cd package/utils/busybox/config/
../convert_menuconfig.pl ../../../../build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/busybox-default/busybox-1.38.0
cd ..
./convert_defaults.pl ../../../build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/busybox-default/busybox-1.38.0/.config > Config-defaults.in
Manual edits needed after config refresh:
* Config-defaults.in: OpenWrt config symbol IPV6 logic applied to
BUSYBOX_DEFAULT_FEATURE_IPV6
* Config-defaults.in: OpenWrt config TARGET_bcm53xx logic applied to
BUSYBOX_DEFAULT_TRUNCATE (commit
547f1ec)
* Config-defaults.in: OpenWrt logic applied to
BUSYBOX_DEFAULT_LOGIN_SESSION_AS_CHILD (commit
dc92917)
* Config-defaults.in: correct the default ports that get reset
BUSYBOX_DEFAULT_FEATURE_HTTPD_PORT_DEFAULT 80
BUSYBOX_DEFAULT_FEATURE_TELNETD_PORT_DEFAULT 23
* config/editors/Config.in: Add USE_GLIBC dependency to
BUSYBOX_CONFIG_FEATURE_VI_REGEX_SEARCH (commit
f141090)
* config/shell/Config.in: change at "Options common to all shells" the conditional symbol
SHELL_ASH --> BUSYBOX_CONFIG_SHELL_ASH
(discussion in http://lists.openwrt.org/pipermail/openwrt-devel/2021-January/033140.html
Apparently our script does not see the hidden option while
prepending config options with "BUSYBOX_CONFIG_" which leads to a
missed dependency when the options are later evaluated.)
* Edit a few Config.in files by adding quotes to sourced items in
config/Config.in, config/networking/Config.in and config/util-linux/Config.in (commit
1da014f)
Signed-off-by: Seo Suchan <tjtncks@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23609
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
config BUSYBOX_DEFAULT_FEATURE_INSTALLER
bool
default n
+config BUSYBOX_DEFAULT_FEATURE_VERSION
+ bool
+ default n
config BUSYBOX_DEFAULT_INSTALL_NO_USR
bool
default n
config BUSYBOX_DEFAULT_FEATURE_LZMA_FAST
bool
default n
+config BUSYBOX_DEFAULT_FEATURE_PATH_TRAVERSAL_PROTECTION
+ bool
+ default n
config BUSYBOX_DEFAULT_FEATURE_VERBOSE
bool
default n
config BUSYBOX_DEFAULT_SHA256SUM
bool
default y
+config BUSYBOX_DEFAULT_SHA384SUM
+ bool
+ default n
config BUSYBOX_DEFAULT_SHA512SUM
bool
default n
config BUSYBOX_DEFAULT_USE_BB_CRYPT_SHA
bool
default y
+config BUSYBOX_DEFAULT_USE_BB_CRYPT_YES
+ bool
+ default n
config BUSYBOX_DEFAULT_ADD_SHELL
bool
default n
config BUSYBOX_DEFAULT_FDISK_SUPPORT_LARGE_DISKS
bool
default n
+config BUSYBOX_DEFAULT_FEATURE_FDISK_BLKSIZE
+ bool
+ default n
config BUSYBOX_DEFAULT_FEATURE_FDISK_WRITABLE
bool
default n
config BUSYBOX_DEFAULT_LOSETUP
bool
default n
+config BUSYBOX_DEFAULT_LSBLK
+ bool
+ default n
config BUSYBOX_DEFAULT_LSPCI
bool
default n
config BUSYBOX_DEFAULT_UNSHARE
bool
default n
+config BUSYBOX_DEFAULT_UUIDGEN
+ bool
+ default n
config BUSYBOX_DEFAULT_WALL
bool
default n
config BUSYBOX_DEFAULT_SSL_CLIENT
bool
default n
+config BUSYBOX_DEFAULT_SSL_SERVER
+ bool
+ default n
config BUSYBOX_DEFAULT_TC
bool
default n
config BUSYBOX_DEFAULT_TELNETD
bool
default n
+config BUSYBOX_DEFAULT_FEATURE_TELNETD_SELFTEST_DEBUG
+ bool
+ default n
config BUSYBOX_DEFAULT_FEATURE_TELNETD_STANDALONE
bool
default n
config BUSYBOX_DEFAULT_FEATURE_UPTIME_UTMP_SUPPORT
bool
default n
+config BUSYBOX_DEFAULT_VMSTAT
+ bool
+ default n
config BUSYBOX_DEFAULT_WATCH
bool
default n
config BUSYBOX_DEFAULT_SHELL_HUSH
bool
default n
+config BUSYBOX_DEFAULT_HUSH_NEED_FOR_SPEED
+ bool
+ default n
config BUSYBOX_DEFAULT_HUSH_BASH_COMPAT
bool
default n
config BUSYBOX_DEFAULT_HUSH_CASE
bool
default n
+config BUSYBOX_DEFAULT_HUSH_ALIAS
+ bool
+ default n
config BUSYBOX_DEFAULT_HUSH_FUNCTIONS
bool
default n
+config BUSYBOX_DEFAULT_HUSH_FUNCTION_KEYWORD
+ bool
+ default n
config BUSYBOX_DEFAULT_HUSH_LOCAL
bool
default n
include $(TOPDIR)/rules.mk
PKG_NAME:=busybox
-PKG_VERSION:=1.37.0
-PKG_RELEASE:=6
+PKG_VERSION:=1.38.0
+PKG_RELEASE:=1
PKG_FLAGS:=essential
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://www.busybox.net/downloads \
https://sources.buildroot.net/$(PKG_NAME)
-PKG_HASH:=3311dff32e746499f4df0d5df04d7eb396382d7e108bb9250e7b519b837043a4
+PKG_HASH:=34f9ea6ff8636f2c9241153b9114eefa9e65674a45318ae1ef95bb5f31c53bb2
PKG_BUILD_DEPENDS:=BUSYBOX_CONFIG_PAM:libpam
PKG_BUILD_PARALLEL:=1
busybox at runtime to create hard links or symlinks for all the
applets that are compiled into busybox.
+config BUSYBOX_CONFIG_FEATURE_VERSION
+ bool "Support --version"
+ default BUSYBOX_DEFAULT_FEATURE_VERSION
+ depends on BUSYBOX_CONFIG_BUSYBOX
+ help
+ Enable 'busybox --version' support.
+
config BUSYBOX_CONFIG_INSTALL_NO_USR
bool "Don't use /usr"
default BUSYBOX_DEFAULT_INSTALL_NO_USR
This option reduces decompression time by about 25% at the cost of
a 1K bigger binary.
+config BUSYBOX_CONFIG_FEATURE_PATH_TRAVERSAL_PROTECTION
+ bool "Prevent extraction of filenames with /../ path component"
+ default BUSYBOX_DEFAULT_FEATURE_PATH_TRAVERSAL_PROTECTION
+ help
+ busybox tar and unzip remove "PREFIX/../" (if it exists)
+ from extracted names.
+ This option enables this behavior for all other unpacking applets,
+ such as cpio, ar, rpm.
+ GNU cpio 2.15 has NO such sanity check.
+# try other archivers and document their behavior?
+
endmenu
help
Compute and check SHA256 message digest
+config BUSYBOX_CONFIG_SHA384SUM
+ bool "sha384sum (7.3 kb)"
+ default BUSYBOX_DEFAULT_SHA384SUM
+ help
+ Compute and check SHA384 message digest
+
config BUSYBOX_CONFIG_SHA512SUM
bool "sha512sum (7.3 kb)"
default BUSYBOX_DEFAULT_SHA512SUM
help
Compute and check SHA3 message digest
-comment "Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum"
- depends on BUSYBOX_CONFIG_MD5SUM || BUSYBOX_CONFIG_SHA1SUM || BUSYBOX_CONFIG_SHA256SUM || BUSYBOX_CONFIG_SHA512SUM || BUSYBOX_CONFIG_SHA3SUM
+comment "Common options for md5sum, sha1sum, sha256sum, ..., sha3sum"
+ depends on BUSYBOX_CONFIG_MD5SUM || BUSYBOX_CONFIG_SHA1SUM || BUSYBOX_CONFIG_SHA256SUM || BUSYBOX_CONFIG_SHA384SUM || BUSYBOX_CONFIG_SHA512SUM || BUSYBOX_CONFIG_SHA3SUM
config BUSYBOX_CONFIG_FEATURE_MD5_SHA1_SUM_CHECK
bool "Enable -c, -s and -w options"
default BUSYBOX_DEFAULT_FEATURE_MD5_SHA1_SUM_CHECK
- depends on BUSYBOX_CONFIG_MD5SUM || BUSYBOX_CONFIG_SHA1SUM || BUSYBOX_CONFIG_SHA256SUM || BUSYBOX_CONFIG_SHA512SUM || BUSYBOX_CONFIG_SHA3SUM
+ depends on BUSYBOX_CONFIG_MD5SUM || BUSYBOX_CONFIG_SHA1SUM || BUSYBOX_CONFIG_SHA256SUM || BUSYBOX_CONFIG_SHA384SUM || BUSYBOX_CONFIG_SHA512SUM || BUSYBOX_CONFIG_SHA3SUM
help
Enabling the -c options allows files to be checked
against pre-calculated hash values.
config BUSYBOX_CONFIG_FEATURE_VI_REGEX_SEARCH
bool "Enable regex in search and replace"
- default BUSYBOX_DEFAULT_FEATURE_VI_REGEX_SEARCH
+ default BUSYBOX_DEFAULT_FEATURE_VI_REGEX_SEARCH # Uses GNU regex, which may be unavailable. FIXME
depends on BUSYBOX_CONFIG_FEATURE_VI_SEARCH
depends on USE_GLIBC
help
config BUSYBOX_CONFIG_FEATURE_EDITING_HISTORY
int "History size"
# Don't allow way too big values here, code uses fixed "char *history[N]" struct member
- range 0 9999
+ range 0 2000
default BUSYBOX_DEFAULT_FEATURE_EDITING_HISTORY
depends on BUSYBOX_CONFIG_FEATURE_EDITING
help
With this option off, login will fail password check for any
user which has password encrypted with these algorithms.
+config BUSYBOX_CONFIG_USE_BB_CRYPT_YES
+ bool "Enable yescrypt functions"
+ default BUSYBOX_DEFAULT_USE_BB_CRYPT_YES
+ depends on BUSYBOX_CONFIG_USE_BB_CRYPT
+ help
+ Enable this if you have passwords starting with "$y$" or
+ in your /etc/passwd or /etc/shadow files. These passwords
+ are hashed using yescrypt algorithms.
+ With this option off, login will fail password check for any
+ user which has password encrypted with these algorithms.
+
config BUSYBOX_CONFIG_ADD_SHELL
bool "add-shell (3.3 kb)"
default BUSYBOX_DEFAULT_ADD_SHELL if BUSYBOX_CONFIG_DESKTOP
default BUSYBOX_DEFAULT_FEATURE_DEFAULT_PASSWD_ALGO
depends on BUSYBOX_CONFIG_PASSWD || BUSYBOX_CONFIG_CRYPTPW || BUSYBOX_CONFIG_CHPASSWD
help
- Possible choices are "d[es]", "m[d5]", "s[ha256]" or "sha512".
+ Possible choices: "d[es]", "m[d5]", "s[ha256]", "sha512", "yescrypt"
config BUSYBOX_CONFIG_CRYPTPW
bool "cryptpw (15 kb)"
default BUSYBOX_DEFAULT_CRYPTPW
select BUSYBOX_CONFIG_TLS
help
This tool pipes data to/from a socket, TLS-encrypting it.
+config BUSYBOX_CONFIG_SSL_SERVER
+ bool "ssl_server (test TLS server)"
+ default BUSYBOX_DEFAULT_SSL_SERVER
+ select BUSYBOX_CONFIG_TLS
+ help
+ inetd-style TLS server. Stdin/stdout are already connected
+ to an accepted TCP socket.
config BUSYBOX_CONFIG_TC
bool "tc (8.3 kb)"
default BUSYBOX_DEFAULT_TC
with all that done, telnetd _should_ work....
+config BUSYBOX_CONFIG_FEATURE_TELNETD_SELFTEST_DEBUG
+ bool "Include self-test (telnetd -@)"
+ default BUSYBOX_DEFAULT_FEATURE_TELNETD_SELFTEST_DEBUG
+ depends on BUSYBOX_CONFIG_TELNETD
+ help
+ Include self-test code for pty/vhangup() behavior.
+ Useful for development and validation on new platforms.
+
config BUSYBOX_CONFIG_FEATURE_TELNETD_STANDALONE
bool "Support standalone telnetd (not inetd only)"
default BUSYBOX_DEFAULT_FEATURE_TELNETD_STANDALONE
depends on BUSYBOX_CONFIG_UPTIME && BUSYBOX_CONFIG_FEATURE_UTMP
help
Display the number of users currently logged on.
+config BUSYBOX_CONFIG_VMSTAT
+ bool "vmstat (2 kb)"
+ default BUSYBOX_DEFAULT_VMSTAT
+ help
+ Report virtual memory statistics
config BUSYBOX_CONFIG_WATCH
bool "watch (5.2 kb)"
default BUSYBOX_DEFAULT_WATCH
bool "setuidgid (4.2 kb)"
default BUSYBOX_DEFAULT_SETUIDGID
help
- Sets soft resource limits as specified by options
+ Sets UID and GID to those of the given account, and execs
+ specified program.
config BUSYBOX_CONFIG_ENVUIDGID
bool "envuidgid (4.1 kb)"
bool "Job control"
default BUSYBOX_DEFAULT_ASH_JOB_CONTROL
depends on BUSYBOX_CONFIG_SHELL_ASH
+ help
+ Enable 'fg', 'bg', 'jobs' and 'kill' builtins.
+ Shell will track whether backgrounded pipes are stopped
+ by signals, and allow to restart them by 'fg' or 'bg'.
+ Otherwise, it will only track whether they have terminated.
config BUSYBOX_CONFIG_ASH_ALIAS
bool "Alias support"
It will compile and work on no-mmu systems.
- It does not handle select, aliases, tilde expansion,
+ It does not handle select, tilde expansion,
&>file and >&file redirection of stdout+stderr.
config BUSYBOX_CONFIG_SHELL_HUSH
# It's only needed to get "nice" menuconfig indenting.
if SHELL_HUSH || BUSYBOX_CONFIG_HUSH || BUSYBOX_CONFIG_SH_IS_HUSH || BUSYBOX_CONFIG_BASH_IS_HUSH
+config BUSYBOX_CONFIG_HUSH_NEED_FOR_SPEED
+ bool "Faster, but larger code"
+ default BUSYBOX_DEFAULT_HUSH_NEED_FOR_SPEED
+ depends on BUSYBOX_CONFIG_SHELL_HUSH
+
config BUSYBOX_CONFIG_HUSH_BASH_COMPAT
bool "bash-compatible extensions"
default BUSYBOX_DEFAULT_HUSH_BASH_COMPAT
help
Enable case ... esac statement. +400 bytes.
+config BUSYBOX_CONFIG_HUSH_ALIAS
+ bool "Support aliases"
+ default BUSYBOX_DEFAULT_HUSH_ALIAS
+ depends on BUSYBOX_CONFIG_SHELL_HUSH
+ help
+ Enable aliases.
+
config BUSYBOX_CONFIG_HUSH_FUNCTIONS
bool "Support funcname() { commands; } syntax"
default BUSYBOX_DEFAULT_HUSH_FUNCTIONS
help
Enable support for shell functions. +800 bytes.
+config BUSYBOX_CONFIG_HUSH_FUNCTION_KEYWORD
+ bool "Support function keyword"
+ default BUSYBOX_DEFAULT_HUSH_FUNCTION_KEYWORD
+ depends on BUSYBOX_CONFIG_HUSH_FUNCTIONS
+ help
+ Support "function FUNCNAME { CMD; }" syntax.
+
config BUSYBOX_CONFIG_HUSH_LOCAL
bool "local builtin"
default BUSYBOX_DEFAULT_HUSH_LOCAL
default BUSYBOX_DEFAULT_FEATURE_SH_HISTFILESIZE
depends on BUSYBOX_CONFIG_SHELL_ASH || BUSYBOX_CONFIG_SHELL_HUSH
help
- This option makes busybox shells to use $HISTFILESIZE variable
- to set shell history size. Note that its max value is capped
- by "History size" setting in library tuning section.
+ This option makes busybox shells to use $HISTSIZE and
+ $HISTFILESIZE variables to set shell history size.
+ Note that its max value is capped by "History size" setting
+ in library tuning section.
config BUSYBOX_CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS
bool "Embed scripts in the binary"
depends on BUSYBOX_CONFIG_FDISK
depends on !BUSYBOX_CONFIG_LFS # with LFS no special code is needed
+config BUSYBOX_CONFIG_FEATURE_FDISK_BLKSIZE
+ bool "Support -s option to list sizes"
+ default BUSYBOX_DEFAULT_FEATURE_FDISK_BLKSIZE
+ depends on BUSYBOX_CONFIG_FDISK
+
config BUSYBOX_CONFIG_FEATURE_FDISK_WRITABLE
bool "Write support"
default BUSYBOX_DEFAULT_FEATURE_FDISK_WRITABLE
losetup is used to associate or detach a loop device with a regular
file or block device, and to query the status of a loop device. This
version does not currently support enabling data encryption.
+config BUSYBOX_CONFIG_LSBLK
+ bool "lsblk (2.5 kb)"
+ default BUSYBOX_DEFAULT_LSBLK
+ help
+ List information about all available or specified block devices.
config BUSYBOX_CONFIG_LSPCI
bool "lspci (6.4 kb)"
default BUSYBOX_DEFAULT_LSPCI
select BUSYBOX_CONFIG_LONG_OPTS
help
Run program with some namespaces unshared from parent.
+config BUSYBOX_CONFIG_UUIDGEN
+ bool "uuidgen (1.1 kb)"
+ default BUSYBOX_DEFAULT_UUIDGEN
+ help
+ Generate a UUID (Universally Unique Identifier) in RFC 4122 format.
config BUSYBOX_CONFIG_WALL
bool "wall (2.9 kb)"
default BUSYBOX_DEFAULT_WALL
+++ /dev/null
---- a/libbb/hash_md5_sha.c
-+++ b/libbb/hash_md5_sha.c
-@@ -1313,7 +1313,9 @@ unsigned FAST_FUNC sha1_end(sha1_ctx_t *
- hash_size = 8;
- if (ctx->process_block == sha1_process_block64
- #if ENABLE_SHA1_HWACCEL
-+# if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
- || ctx->process_block == sha1_process_block64_shaNI
-+# endif
- #endif
- ) {
- hash_size = 5;
+++ /dev/null
-From 87e60dcf0f7ef917b73353d8605188a420bd91f9 Mon Sep 17 00:00:00 2001
-From: Natanael Copa <ncopa@alpinelinux.org>
-Date: Mon, 28 Oct 2024 15:26:21 +0100
-Subject: hexdump: fix regression with -n4 -e '"%u"'
-
-Fix bug introduced in busybox 1.37.0 that broke kernel builds.
-
-Fixes commit e2287f99fe6f (od: for !DESKTOP, match output more closely
-to GNU coreutils 9.1, implement -s)
-
-function old new delta
-rewrite 967 976 +9
-
-Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- libbb/dump.c | 6 ++++--
- testsuite/hexdump.tests | 6 ++++++
- 2 files changed, 10 insertions(+), 2 deletions(-)
-
---- a/libbb/dump.c
-+++ b/libbb/dump.c
-@@ -198,9 +198,11 @@ static NOINLINE void rewrite(priv_dumper
- if (!e)
- goto DO_BAD_CONV_CHAR;
- pr->flags = F_INT;
-- if (e > int_convs + 1) /* not d or i? */
-- pr->flags = F_UINT;
- byte_count_str = "\010\004\002\001";
-+ if (e > int_convs + 1) { /* not d or i? */
-+ pr->flags = F_UINT;
-+ byte_count_str++;
-+ }
- goto DO_BYTE_COUNT;
- } else
- if (strchr(int_convs, *p1)) { /* %d etc */
---- a/testsuite/hexdump.tests
-+++ b/testsuite/hexdump.tests
-@@ -82,4 +82,10 @@ testing "hexdump -e /2 %d" \
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"\
- "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"\
-
-+testing "hexdump -n4 -e '\"%u\"'" \
-+ "hexdump -n4 -e '\"%u\"'" \
-+ "12345678" \
-+ "" \
-+ "\x4e\x61\xbc\x00AAAA"
-+
- exit $FAILCOUNT
+++ /dev/null
-From f5c7cae55fc3e19d074198bc12152486067ea8c7 Mon Sep 17 00:00:00 2001
-From: Radoslav Kolev <radoslav.kolev@suse.com>
-Date: Thu, 24 Apr 2025 00:45:25 +0300
-Subject: [PATCH] hexdump: fix regression for uint16 on big endian systems
-
-Commit 34751d8bf introduced a bug in the handling of uint16
-values on big endian systems not considered safe for unaligned
-access when falling back to memcpy.
-
-Signed-off-by: Radoslav Kolev <radoslav.kolev@suse.com>
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
----
- libbb/dump.c | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
---- a/libbb/dump.c
-+++ b/libbb/dump.c
-@@ -667,15 +667,21 @@ static NOINLINE void display(priv_dumper
- conv_u(pr, bp);
- break;
- case F_UINT: {
-+ union {
-+ uint16_t uval16;
-+ uint32_t uval32;
-+ } u;
- unsigned value = (unsigned char)*bp;
- switch (pr->bcnt) {
- case 1:
- break;
- case 2:
-- move_from_unaligned16(value, bp);
-+ move_from_unaligned16(u.uval16, bp);
-+ value = u.uval16;
- break;
- case 4:
-- move_from_unaligned32(value, bp);
-+ move_from_unaligned32(u.uval32, bp);
-+ value = u.uval32;
- break;
- /* case 8: no users yet */
- }
--- a/networking/libiproute/iplink.c
+++ b/networking/libiproute/iplink.c
-@@ -953,7 +953,7 @@ static int do_add_or_delete(char **argv,
+@@ -974,7 +974,7 @@ static int do_add_or_delete(char **argv,
}
xrtnl_open(&rth);
ll_init_map(&rth);
/* This is rather complex: if user is not found in /etc/shadow,
--- a/loginutils/cryptpw.c
+++ b/loginutils/cryptpw.c
-@@ -87,7 +87,7 @@ int cryptpw_main(int argc UNUSED_PARAM,
- /* Supports: cryptpw -m sha256 PASS 'rounds=999999999$SALT' */
- char salt[MAX_PW_SALT_LEN + sizeof("rounds=999999999$")];
+@@ -86,7 +86,7 @@ int cryptpw_main(int argc UNUSED_PARAM,
+ {
+ char salt[MAX_PW_SALT_LEN];
char *salt_ptr;
- char *password;
+ char *password, *hash;
const char *opt_m, *opt_S;
int fd;
-@@ -132,8 +132,12 @@ int cryptpw_main(int argc UNUSED_PARAM,
+@@ -155,8 +155,12 @@ int cryptpw_main(int argc UNUSED_PARAM,
/* may still be NULL on EOF/error */
}