summaryrefslogtreecommitdiff
path: root/aports/busybox
diff options
context:
space:
mode:
authorPÁLI Gábor János <pali.gabor@gmail.com>2024-03-16 13:33:00 +0100
committerPÁLI Gábor János <pali.gabor@gmail.com>2024-03-16 13:44:13 +0100
commitd7e702dd5529860e3d97a84e387bad95573f5894 (patch)
treee4c8bff35d942fadd35d2cd76a93ca4994fb55cb /aports/busybox
parentf9967eae7a169b920daedecbc176c792d516f471 (diff)
downloadfreebsd-wifibox-alpine-d7e702dd5529860e3d97a84e387bad95573f5894.zip
Update to Linux 6.6 & 6.8, and Alpine 3.19
- Update dhcpcd to 10.0.5 - Update iptables to 1.8.10 - Update linux-lts to 6.6.22 - Update linux-edge to 6.8.1 - Update openrc 0.52.1 - Update mDNSResponder to 2200.80.16 - Update rtl8821ce to snapshot of 20240120 - Update rtw88 to snapshot of 20231024 - Resolve driver conflict between rtw88 and rtl8821ce - Update rtw89 to snapshot of 20240310 - Update socat to 1.8.0.0 - Import security fixes for wpa_supplicant
Diffstat (limited to 'aports/busybox')
-rw-r--r--aports/busybox/0031-ash-initialize-basepf.buf-in-ash.patch58
-rw-r--r--aports/busybox/0032-install-Fix-chown-resetting-suid-sgid-bits-from-chmo.patch53
-rw-r--r--aports/busybox/0033-find-fix-xdev-depth-and-delete.patch230
-rw-r--r--aports/busybox/0034-udhcp-Avoid-leaking-uninitialized-stale-data.patch75
-rw-r--r--aports/busybox/APKBUILD15
-rw-r--r--aports/busybox/config8
-rw-r--r--aports/busybox/udhcpc.conf3
7 files changed, 431 insertions, 11 deletions
diff --git a/aports/busybox/0031-ash-initialize-basepf.buf-in-ash.patch b/aports/busybox/0031-ash-initialize-basepf.buf-in-ash.patch
new file mode 100644
index 0000000..51e5301
--- /dev/null
+++ b/aports/busybox/0031-ash-initialize-basepf.buf-in-ash.patch
@@ -0,0 +1,58 @@
+From ed4a24dfd10539e144ed4b7de008f8791d09a551 Mon Sep 17 00:00:00 2001
+From: zhuyan <zhuyan34@huawei.com>
+Date: Tue, 29 Aug 2023 20:50:32 +0800
+Subject: [PATCH] ash: initialize basepf.buf in ash
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When I planned to print the command in read_line_input, I found that after
+the system started, the command printed for the first time was always
+garbled.
+
+After analysis, it is found that in the init() function of ash, the
+variable basepf.buf is not initialized after applying for memory, resulting
+in garbled initial data. Then assign it to the global variable
+g_parsefile->buf in ash.c, and then pass g_parsefile->buf to the parameter
+command of the function read_line_input in the function preadfd(), and
+finally cause it to be garbled when the command is printed by
+read_line_input.
+
+The call stack is as follows:
+ #0 read_line_input (st=0xb6fff220, prompt=0xb6ffc910 "\\[\\033[32m\\]\\h \\w\\[\\033[m\\] \\$ ", command=command@entry=0xb6ffc230 "P\325\377\266P\325\377\266", maxsize=maxsize@entry=1024) at libbb/lineedit.c:2461
+ #1 0x0043ef8c in preadfd () at shell/ash.c:10812
+ #2 preadbuffer () at shell/ash.c:10914
+ #3 pgetc () at shell/ash.c:10997
+ #4 0x00440c20 in pgetc_eatbnl () at shell/ash.c:11039
+ #5 0x00440cbc in xxreadtoken () at shell/ash.c:13157
+ #6 0x00440f40 in readtoken () at shell/ash.c:13268
+ #7 0x00441234 in list (nlflag=nlflag@entry=1) at shell/ash.c:11782
+ #8 0x004420e8 in parsecmd (interact=<optimized out>) at shell/ash.c:13344
+ #9 0x00442c34 in cmdloop (top=top@entry=1) at shell/ash.c:13549
+ #10 0x00444e4c in ash_main (argc=<optimized out>, argv=0x444e4c <ash_main+1328>) at shell/ash.c:14747
+ #11 0x00407954 in run_applet_no_and_exit (applet_no=9, name=<optimized out>, argv=0xbefffd34) at libbb/appletlib.c:1024
+ #12 0x00407b68 in run_applet_and_exit (name=0xbefffe56 "ash", argv=0x9) at libbb/appletlib.c:1047
+ #13 0x00407f88 in main (argc=<optimized out>, argv=0xbefffd34) at libbb/appletlib.c:1181
+
+Fixes: 82dd14a510ca ("ash: use CONFIG_FEATURE_EDITING_MAX_LEN")
+
+Signed-off-by: zhuyan <zhuyan34@huawei.com>
+Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
+Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net>
+---
+ shell/ash.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/ash.c b/shell/ash.c
+index e1d93da73..771fc8bf9 100644
+--- a/shell/ash.c
++++ b/shell/ash.c
+@@ -14484,7 +14484,7 @@ static NOINLINE void
+ init(void)
+ {
+ /* we will never free this */
+- basepf.next_to_pgetc = basepf.buf = ckmalloc(IBUFSIZ);
++ basepf.next_to_pgetc = basepf.buf = ckzalloc(IBUFSIZ);
+ basepf.linno = 1;
+
+ sigmode[SIGCHLD - 1] = S_DFL; /* ensure we install handler even if it is SIG_IGNed */
diff --git a/aports/busybox/0032-install-Fix-chown-resetting-suid-sgid-bits-from-chmo.patch b/aports/busybox/0032-install-Fix-chown-resetting-suid-sgid-bits-from-chmo.patch
new file mode 100644
index 0000000..795275f
--- /dev/null
+++ b/aports/busybox/0032-install-Fix-chown-resetting-suid-sgid-bits-from-chmo.patch
@@ -0,0 +1,53 @@
+From 6d22c9abc29d43e919e819ff004fcd84a90de60b Mon Sep 17 00:00:00 2001
+From: Nero <nero@w1r3.net>
+Date: Sat, 23 Sep 2023 11:50:04 +0000
+Subject: [PATCH] install: Fix chown resetting suid/sgid bits from chmod
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since Linux 2.2.13, chown(2) resets the suid/gid bits for all users.
+This patch changes the ordering so that chmod gets called after chown.
+
+This behavior follows GNU coreutils.
+
+Signed-off-by: Nero <nero@w1r3.net>
+Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
+---
+ coreutils/install.c | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+diff --git a/coreutils/install.c b/coreutils/install.c
+index c0f1c538a..00f8be87e 100644
+--- a/coreutils/install.c
++++ b/coreutils/install.c
+@@ -244,6 +244,15 @@ int install_main(int argc, char **argv)
+ }
+ }
+
++ /* Set the user and group id */
++ /* (must be before chmod, or else chown may clear suid/gid bits) */
++ if ((opts & (OPT_OWNER|OPT_GROUP))
++ && lchown(dest, uid, gid) == -1
++ ) {
++ bb_perror_msg("can't change %s of %s", "ownership", dest);
++ ret = EXIT_FAILURE;
++ }
++
+ /* Set the file mode (always, not only with -m).
+ * GNU coreutils 6.10 is not affected by umask. */
+ if (chmod(dest, mode) == -1) {
+@@ -254,13 +263,6 @@ int install_main(int argc, char **argv)
+ if (use_default_selinux_context)
+ setdefaultfilecon(dest);
+ #endif
+- /* Set the user and group id */
+- if ((opts & (OPT_OWNER|OPT_GROUP))
+- && lchown(dest, uid, gid) == -1
+- ) {
+- bb_perror_msg("can't change %s of %s", "ownership", dest);
+- ret = EXIT_FAILURE;
+- }
+ next:
+ if (ENABLE_FEATURE_CLEAN_UP && isdir)
+ free(dest);
diff --git a/aports/busybox/0033-find-fix-xdev-depth-and-delete.patch b/aports/busybox/0033-find-fix-xdev-depth-and-delete.patch
new file mode 100644
index 0000000..4cd8d9b
--- /dev/null
+++ b/aports/busybox/0033-find-fix-xdev-depth-and-delete.patch
@@ -0,0 +1,230 @@
+From e49db109bba7ff0b84fe7ba4f1f08405a6b72419 Mon Sep 17 00:00:00 2001
+From: Dominique Martinet <dominique.martinet@atmark-techno.com>
+Date: Fri, 27 Oct 2023 06:42:35 +0900
+Subject: [PATCH] find: fix -xdev -depth (and -delete)
+
+find -xdev with -depth would check for same_fs after the subdirectory
+has been processed (because the check is done in the file/dir action,
+which is evaluated too late in the -depth case)
+This renders `find -xdev -delete` useless, as reported in 2012 here:
+https://bugs.busybox.net/show_bug.cgi?id=5756
+
+The bug report suggested adding an extra hook, which would be required
+if we were to keep the current xdev approach that allows all filesystems
+given in argument, but GNU findutils and OpenBSD find actually stop on
+the first filesystem boundary e.g. for the following tree:
+
+$ find test -exec stat --format "%d %n" {} +
+27 test
+27 test/file
+59 test/tmpfs
+27 test/tmpfs/bind
+27 test/tmpfs/bind/file
+59 test/tmpfs/file
+(Where 'test/tmpfs' is a tmpfs, and 'test/tmpfs/bind' is a bind mount
+to a neighboring directory in the same filesystem as 'test' -- also
+tested with a symlink and -follow for openbsd which has no bind mount)
+
+Then `find test test/tmpfs -xdev` does not print test/tmpfs/bind/file.
+
+This makes the implementation much simpler (although it's a bit ugly to
+carry the parent st_dev as an argument to the function) and smaller
+code, and would allow for easy addition of rm/cp --one-file-system if
+we want to do that later.
+
+Note: this also no longer stores the stat result in 'status' in
+recursive_action1 as that was not used and doing this saves 10 bytes
+
+function old new delta
+recursive_action1 361 385 +24
+parse_params 1503 1510 +7
+recursive_action 63 65 +2
+fileAction 206 127 -79
+find_main 520 417 -103
+------------------------------------------------------------------------------
+(add/remove: 0/0 grow/shrink: 3/2 up/down: 33/-182) Total: -149 bytes
+ text data bss dec hex filename
+ 78267 1582 1552 81401 13df9 busybox_old
+ 78118 1582 1552 81252 13d64 busybox_unstripped
+---
+ findutils/find.c | 44 ++--------------------------------------
+ include/libbb.h | 1 +
+ libbb/recursive_action.c | 19 ++++++++++-------
+ 3 files changed, 15 insertions(+), 49 deletions(-)
+
+diff --git a/findutils/find.c b/findutils/find.c
+index bb6ad31e5edc..e88fbd3ba3bf 100644
+--- a/findutils/find.c
++++ b/findutils/find.c
+@@ -488,7 +488,6 @@ struct globals {
+ #endif
+ action ***actions;
+ smallint need_print;
+- smallint xdev_on;
+ smalluint exitstatus;
+ recurse_flags_t recurse_flags;
+ IF_FEATURE_FIND_EXEC_PLUS(unsigned max_argv_len;)
+@@ -988,26 +987,10 @@ static int FAST_FUNC fileAction(
+ struct stat *statbuf)
+ {
+ int r;
+- int same_fs = 1;
+-
+-#if ENABLE_FEATURE_FIND_XDEV
+- if (S_ISDIR(statbuf->st_mode) && G.xdev_count) {
+- int i;
+- for (i = 0; i < G.xdev_count; i++) {
+- if (G.xdev_dev[i] == statbuf->st_dev)
+- goto found;
+- }
+- //bb_error_msg("'%s': not same fs", fileName);
+- same_fs = 0;
+- found: ;
+- }
+-#endif
+
+ #if ENABLE_FEATURE_FIND_MAXDEPTH
+ if (state->depth < G.minmaxdepth[0]) {
+- if (same_fs)
+- return TRUE; /* skip this, continue recursing */
+- return SKIP; /* stop recursing */
++ return TRUE; /* skip this, continue recursing */
+ }
+ if (state->depth > G.minmaxdepth[1])
+ return SKIP; /* stop recursing */
+@@ -1024,11 +1007,6 @@ static int FAST_FUNC fileAction(
+ return SKIP;
+ }
+ #endif
+- /* -xdev stops on mountpoints, but AFTER mountpoit itself
+- * is processed as usual */
+- if (!same_fs) {
+- return SKIP;
+- }
+
+ /* Cannot return 0: our caller, recursive_action(),
+ * will perror() and skip dirs (if called on dir) */
+@@ -1266,7 +1244,7 @@ static action*** parse_params(char **argv)
+ #if ENABLE_FEATURE_FIND_XDEV
+ else if (parm == OPT_XDEV) {
+ dbg("%d", __LINE__);
+- G.xdev_on = 1;
++ G.recurse_flags |= ACTION_XDEV;
+ }
+ #endif
+ #if ENABLE_FEATURE_FIND_MAXDEPTH
+@@ -1685,24 +1663,6 @@ int find_main(int argc UNUSED_PARAM, char **argv)
+ G.actions = parse_params(&argv[firstopt]);
+ argv[firstopt] = NULL;
+
+-#if ENABLE_FEATURE_FIND_XDEV
+- if (G.xdev_on) {
+- struct stat stbuf;
+-
+- G.xdev_count = firstopt;
+- G.xdev_dev = xzalloc(G.xdev_count * sizeof(G.xdev_dev[0]));
+- for (i = 0; argv[i]; i++) {
+- /* not xstat(): shouldn't bomb out on
+- * "find not_exist exist -xdev" */
+- if (stat(argv[i], &stbuf) == 0)
+- G.xdev_dev[i] = stbuf.st_dev;
+- /* else G.xdev_dev[i] stays 0 and
+- * won't match any real device dev_t
+- */
+- }
+- }
+-#endif
+-
+ for (i = 0; argv[i]; i++) {
+ if (!recursive_action(argv[i],
+ G.recurse_flags,/* flags */
+diff --git a/include/libbb.h b/include/libbb.h
+index 5d0fe924eed1..d903330cccb0 100644
+--- a/include/libbb.h
++++ b/include/libbb.h
+@@ -512,6 +512,7 @@ enum {
+ ACTION_DEPTHFIRST = (1 << 3),
+ ACTION_QUIET = (1 << 4),
+ ACTION_DANGLING_OK = (1 << 5),
++ ACTION_XDEV = (1 << 6),
+ };
+ typedef uint8_t recurse_flags_t;
+ typedef struct recursive_state {
+diff --git a/libbb/recursive_action.c b/libbb/recursive_action.c
+index b1c4bfad7ccf..d4b40afdead3 100644
+--- a/libbb/recursive_action.c
++++ b/libbb/recursive_action.c
+@@ -62,13 +62,15 @@ static int FAST_FUNC true_action(struct recursive_state *state UNUSED_PARAM,
+ * ACTION_FOLLOWLINKS mainly controls handling of links to dirs.
+ * 0: lstat(statbuf). Calls fileAction on link name even if points to dir.
+ * 1: stat(statbuf). Calls dirAction and optionally recurse on link to dir.
++ *
++ * If ACTION_XDEV, stop on different filesystem _after_ it has been processed
+ */
+
+-static int recursive_action1(recursive_state_t *state, const char *fileName)
++static int recursive_action1(recursive_state_t *state, const char *fileName, dev_t parentDev)
+ {
+ struct stat statbuf;
+ unsigned follow;
+- int status;
++ int status = TRUE;
+ DIR *dir;
+ struct dirent *next;
+
+@@ -76,8 +78,7 @@ static int recursive_action1(recursive_state_t *state, const char *fileName)
+ if (state->depth == 0)
+ follow = ACTION_FOLLOWLINKS | ACTION_FOLLOWLINKS_L0;
+ follow &= state->flags;
+- status = (follow ? stat : lstat)(fileName, &statbuf);
+- if (status < 0) {
++ if ((follow ? stat : lstat)(fileName, &statbuf) < 0) {
+ #ifdef DEBUG_RECURS_ACTION
+ bb_error_msg("status=%d flags=%x", status, state->flags);
+ #endif
+@@ -114,6 +115,10 @@ static int recursive_action1(recursive_state_t *state, const char *fileName)
+ return TRUE;
+ }
+
++ /* skip cross devices -- we still need to process action */
++ if ((state->flags & ACTION_XDEV) && parentDev != 0 && statbuf.st_dev != parentDev)
++ goto skip_recurse;
++
+ dir = opendir(fileName);
+ if (!dir) {
+ /* findutils-4.1.20 reports this */
+@@ -121,7 +126,6 @@ static int recursive_action1(recursive_state_t *state, const char *fileName)
+ /* To trigger: "find -exec rm -rf {} \;" */
+ goto done_nak_warn;
+ }
+- status = TRUE;
+ while ((next = readdir(dir)) != NULL) {
+ char *nextFile;
+ int s;
+@@ -132,7 +136,7 @@ static int recursive_action1(recursive_state_t *state, const char *fileName)
+
+ /* process every file (NB: ACTION_RECURSE is set in flags) */
+ state->depth++;
+- s = recursive_action1(state, nextFile);
++ s = recursive_action1(state, nextFile, statbuf.st_dev);
+ if (s == FALSE)
+ status = FALSE;
+ free(nextFile);
+@@ -146,6 +150,7 @@ static int recursive_action1(recursive_state_t *state, const char *fileName)
+ }
+ closedir(dir);
+
++skip_recurse:
+ if (state->flags & ACTION_DEPTHFIRST) {
+ if (!state->dirAction(state, fileName, &statbuf))
+ goto done_nak_warn;
+@@ -177,5 +182,5 @@ int FAST_FUNC recursive_action(const char *fileName,
+ state.fileAction = fileAction ? fileAction : true_action;
+ state.dirAction = dirAction ? dirAction : true_action;
+
+- return recursive_action1(&state, fileName);
++ return recursive_action1(&state, fileName, 0);
+ }
+--
+2.39.2
+
diff --git a/aports/busybox/0034-udhcp-Avoid-leaking-uninitialized-stale-data.patch b/aports/busybox/0034-udhcp-Avoid-leaking-uninitialized-stale-data.patch
new file mode 100644
index 0000000..d61c5fb
--- /dev/null
+++ b/aports/busybox/0034-udhcp-Avoid-leaking-uninitialized-stale-data.patch
@@ -0,0 +1,75 @@
+From e265c8d4c039729f2a68f3b1fb589c13c38d86f8 Mon Sep 17 00:00:00 2001
+From: Russ Dill <russ.dill@gmail.com>
+Date: Mon, 2 Oct 2023 12:34:50 -0700
+Subject: [PATCH] udhcp: Avoid leaking uninitialized/stale data
+
+I noticed a commit in connman:
+
+"gdhcp: Avoid leaking stack data via unitiialized variable" [1]
+
+Since gdhcp is just BusyBox udhcp with the serial numbers filed off, I
+checked if BusyBox udhcp has a related issue.
+
+The issue is that the get_option logic assumes any data within the
+memory area of the buffer is "valid". This reduces the complexity of the
+function at the cost of reading past the end of the actually received
+data in the case of specially crafted packets. This is not a problem
+for the udhcp_recv_kernel_packet data path as the entire memory
+area is zeroed. However, d4/d6_recv_raw_packet does not zero the
+memory.
+
+Note that a related commit [2] is not required as we are zeroing
+any data that can be read by the get_option function.
+
+[1] https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=a74524b3e3fad81b0fd1084ffdf9f2ea469cd9b1
+[2] https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=58d397ba74873384aee449690a9070bacd5676fa
+
+function old new delta
+d4_recv_raw_packet 484 497 +13
+d6_recv_raw_packet 216 228 +12
+.rodata 105390 105381 -9
+------------------------------------------------------------------------------
+(add/remove: 0/0 grow/shrink: 2/1 up/down: 25/-9) Total: 16 bytes
+
+Signed-off-by: Russ Dill <russ.dill@gmail.com>
+Cc: Colin Wee <cwee@tesla.com>
+Cc: Denys Vlasenko <vda.linux@googlemail.com>
+Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
+---
+ networking/udhcp/d6_dhcpc.c | 1 +
+ networking/udhcp/dhcpc.c | 3 ++-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c
+index cdd06188e..a72fd31bd 100644
+--- a/networking/udhcp/d6_dhcpc.c
++++ b/networking/udhcp/d6_dhcpc.c
+@@ -961,6 +961,7 @@ static NOINLINE int d6_recv_raw_packet(struct in6_addr *peer_ipv6, struct d6_pac
+ d6_dump_packet(&packet.data);
+
+ bytes -= sizeof(packet.ip6) + sizeof(packet.udp);
++ memset(d6_pkt, 0, sizeof(*d6_pkt));
+ memcpy(d6_pkt, &packet.data, bytes);
+ return bytes;
+ }
+diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
+index 200a2fb8a..07e2eadfe 100644
+--- a/networking/udhcp/dhcpc.c
++++ b/networking/udhcp/dhcpc.c
+@@ -966,7 +966,7 @@ static NOINLINE int d4_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd)
+ check = packet.udp.check;
+ packet.udp.check = 0;
+ if (check && check != inet_cksum(&packet, bytes)) {
+- log1s("packet with bad UDP checksum received, ignoring");
++ log1s("packet with bad UDP checksum, ignoring");
+ return -2;
+ }
+ skip_udp_sum_check:
+@@ -981,6 +981,7 @@ static NOINLINE int d4_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd)
+ udhcp_dump_packet(&packet.data);
+
+ bytes -= sizeof(packet.ip) + sizeof(packet.udp);
++ memset(dhcp_pkt, 0, sizeof(*dhcp_pkt));
+ memcpy(dhcp_pkt, &packet.data, bytes);
+ return bytes;
+ }
diff --git a/aports/busybox/APKBUILD b/aports/busybox/APKBUILD
index 633f898..23b4d17 100644
--- a/aports/busybox/APKBUILD
+++ b/aports/busybox/APKBUILD
@@ -1,7 +1,7 @@
# Maintainer: Gabor Pali <pali.gabor@gmail.com>
pkgname=busybox
pkgver=1.36.1
-pkgrel=1 # base: 2
+pkgrel=2 # base: 15
pkgdesc="Size optimized toolbox of many common UNIX utilities"
url="https://busybox.net/"
arch="all"
@@ -59,11 +59,14 @@ source="https://busybox.net/downloads/busybox-$pkgver.tar.bz2
acpid.logrotate
config
default.script
+ udhcpc.conf
$_openrc_files
$_mdev_openrc_files
"
# secfixes:
+# 1.36.1-r2:
+# - CVE-2022-48174
# 1.35.0-r17:
# - CVE-2022-30065
# 1.35.0-r7:
@@ -163,15 +166,12 @@ package() {
"$pkgdir"/etc/udhcpc
ln -s /media/etc/udhcpd.conf "$pkgdir"/etc
+ install -Dm644 "$srcdir"/udhcpc.conf "$pkgdir"/etc/udhcpc/udhcpc.conf
+
cat >"$pkgdir"/etc/securetty <<EOF
console
ttyS0
EOF
- cat >"$pkgdir"/etc/udhcpc/udhcpc.conf <<EOF
-RESOLV_CONF="/tmp/resolv.conf"
-UDHCPD_CONF_TEMPLATE="/etc/udhcpd.conf"
-UDHCPD_CONF="/tmp/udhcpd.conf"
-EOF
# script for udhcpc
install -Dm755 "$srcdir"/default.script \
@@ -217,8 +217,9 @@ d3bd84c42487de573c0c5165a847fd233ddcd4d53a61b1e03c30a46b6dba3993e741f12daf167b83
5f8c1a848f28aff2b28085950c561e1a51dfcea043da455e3daf9b960025dd8789ecfe43370553cb727d4ec239aa23c42e3ae5f6ef1cd5768d69c80c31b8f39e 0029-awk-fix-use-after-realloc-CVE-2021-42380-closes-1560.patch
28748a431718f270b2d0023d09f059e6a32501afb9fd243c4b127fec28bc9312ffb7fdcc1563544a2cb29bed66383ecfea7957d557f7b21402ec3bdb6938004f 0030-shell-avoid-segfault-on-0-0-0-09J-.-Closes-15216.patch
aa93095e20de88730f526c6f463cef711b290b9582cdbd8c1ba2bd290019150cbeaa7007c2e15f0362d5b9315dd63f60511878f0ea05e893f4fdfb4a54af3fb1 acpid.logrotate
-b1e13a736eaf8a621b648d97c2526fe72215a5bfb13277a58c7d631bcee08cbcea20dd3d11ea8a97e545ec137adc41bd75f5f6dcbcfae96934fe6b3d14c94b46 config
+b0b65c0b2955bc4ff7848df58eedec7807c48abf0c3c4f057276068a706568385fdce94b7a68ea9845d11dc7c0d410adc34545d8aa1926b18704db82e4def246 config
6c1d25c733fd9ac6ba7d3c7f474c836fbfd41d8f1753ec9c21c08d57cd6249023a0b16f81da4d2ec5d56d14509f7ba1fffadf691504f0670f90017aaf1ed564b default.script
+21fbd1fbe2e77922c5d465aace694cf69835a159361eb56571780d67168338bf34565f48158303ce39438fe03ffee2f64f9637e97c3d0a74fd25b0c200b1e392 udhcpc.conf
fcb532233fd7ba8cad302d037b88cff00ee8b96b37c90b34fc823479208cf7cdda48818c972ce2c4703b7283fd58e99ba8a724818f884f3b09eaa7e2d6ffad21 acpid.initd
34c6f3197064bb91619b899b28a201bd4d920b18bded3845440b2cb36dc6f16cabf447c96878349b16e46c30184cbe48bac00a01c5f7cf1be038c0b7136064c5 crond.confd
f3a104095c659eef79925e8df850cdac499f6c7756fb9647088a24b98dc72f37413c3869da6113bcc578c2178c1c2e5ab8d31a50ad2e472c06aaf408e8924d6a crond.initd
diff --git a/aports/busybox/config b/aports/busybox/config
index efab056..e98a24c 100644
--- a/aports/busybox/config
+++ b/aports/busybox/config
@@ -53,7 +53,7 @@ CONFIG_EXTRA_CFLAGS=""
CONFIG_EXTRA_LDFLAGS=""
CONFIG_EXTRA_LDLIBS=""
# CONFIG_USE_PORTABLE_CODE is not set
-CONFIG_STACK_OPTIMIZATION_386=y
+# CONFIG_STACK_OPTIMIZATION_386 is not set
CONFIG_STATIC_LIBGCC=y
#
@@ -239,7 +239,7 @@ CONFIG_FEATURE_DATE_ISOFMT=y
CONFIG_FEATURE_DATE_COMPAT=y
# CONFIG_DD is not set
# CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set
-# CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set
+CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
# CONFIG_FEATURE_DD_IBS_OBS is not set
# CONFIG_FEATURE_DD_STATUS is not set
CONFIG_DF=y
@@ -420,7 +420,7 @@ CONFIG_CMP=y
CONFIG_DIFF=y
CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
CONFIG_FEATURE_DIFF_DIR=y
-CONFIG_ED=y
+# CONFIG_ED is not set
# CONFIG_PATCH is not set
CONFIG_SED=y
# CONFIG_VI is not set
@@ -1148,7 +1148,7 @@ CONFIG_ASH_MAIL=y
CONFIG_ASH_ECHO=y
CONFIG_ASH_PRINTF=y
CONFIG_ASH_TEST=y
-CONFIG_ASH_SLEEP=y
+# CONFIG_ASH_SLEEP is not set
CONFIG_ASH_HELP=y
CONFIG_ASH_GETOPTS=y
CONFIG_ASH_CMDCMD=y
diff --git a/aports/busybox/udhcpc.conf b/aports/busybox/udhcpc.conf
new file mode 100644
index 0000000..909bb9d
--- /dev/null
+++ b/aports/busybox/udhcpc.conf
@@ -0,0 +1,3 @@
+RESOLV_CONF="/tmp/resolv.conf"
+UDHCPD_CONF_TEMPLATE="/etc/udhcpd.conf"
+UDHCPD_CONF="/tmp/udhcpd.conf"