Hi,
Please find the debdiff attached.
On Tue, Jan 06, 2026 at 12:48:03PM +0100, Daniel Gröber wrote:
> Package: release.debian.org
> Severity: normal
> Tags: trixie
> X-Debbugs-Cc: ifupdown@packages.debian.org, dxld@darkboxed.org, Mark Kamichoff <prox@janeway.prolixium.com>
> Control: affects -1 + src:ifupdown
> User: release.debian.org@packages.debian.org
> Usertags: pu
>
> [ Reason ]
> ifupdown in stable introduced a regression causing none of the important
> internal scripts getting executed.
>
> [ Impact ]
> Boot failures, service failures, IPv6 network unreachability.
>
> Problems I've found so far: Not waiting for IPv6 DAD to complete can cause
> persistent downstream service failures (#1122511) and not waiting for IPv6
> link-locals causes DHCP configuration to fail (#1088852).
>
> [ Tests ]
> I'm asking an affected user to confirm #1122511 is fixed before uploading
> to unstable since I don't have time to do a deep dive to confirm it
> manually myself right now.
>
> Since the underlying breakage is the same for these bugs that should give
> us sufficient test coverage for both bugs.
I've manually validated the fix in unstable (0.8.45) in a debvm using
strace and ifup -v inspection (can see settle-dad.sh for `inet6 static` and
wait-for-ll6.sh for `inet6 dhcp` when isc-dhcp-client is installed).
Internal scripts where execable() previously returned false are now
executed properly and system binaries (tested with `inet dhcp` and
isc-dhcp-client) are still executed as expected - meaning execable() is
still returning true for them as well.
> [ Risks ]
> The actual bug is trivial once you see it.
>
> Worst case if I fuxed up the fix doesn't fix it, but since execable() is
> already as broken as it can be it wont break any further ;-).
>
[ Checklist (Updated) ]
[x] *all* changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in (old)stable
[x] the issue is verified as fixed in unstable
> [ Changes ]
>
> - Fix execable() returning false for scripts in lib(exec)
>
> Commit 1eee7a30 ("Use relative names when executing programs") released
> in 0.8.42 failed to take into account that PATH is only set locally when
> executing commands, not globally and so getenv("PATH") returns the
> system default nor our extended PATH.
>
> [ Other info ]
> I'll send the final debdiff as soon as I get confirmation for the fix in
> experimental.
--Daniel
diff -Nru ifupdown-0.8.44/archcommon.c ifupdown-0.8.44+deb13u1/archcommon.c
--- ifupdown-0.8.44/archcommon.c 2024-08-20 04:02:23.000000000 +0200
+++ ifupdown-0.8.44+deb13u1/archcommon.c 2026-01-08 14:16:10.000000000 +0100
@@ -35,17 +35,13 @@
bool execable(const char *program) {
char *filename = NULL;
- const char *path_list;
+ const char *path_list = EXECUTE_LOCAL_PATHLIST;
const char *path, *path_end;
size_t path_len;
if (program[0] == '/')
return file_is_exec(program);
- path_list = getenv("PATH");
- if (!path_list)
- return false;
-
/*
* We allocate based on the length of PATH and the program name we
* are looking for (plus one byte for the terminating NUL, and a
diff -Nru ifupdown-0.8.44/debian/changelog ifupdown-0.8.44+deb13u1/debian/changelog
--- ifupdown-0.8.44/debian/changelog 2024-09-17 14:08:12.000000000 +0200
+++ ifupdown-0.8.44+deb13u1/debian/changelog 2026-01-08 14:17:04.000000000 +0100
@@ -1,3 +1,18 @@
+ifupdown (0.8.44+deb13u1) trixie; urgency=medium
+
+ * Fix ifup regression where it would return before IPv6 DAD had
+ completed allowing boot to proceed and causing subsequent service
+ start failures with "Cannot assign requested" or "Address not available".
+ (Closes: #1122511)
+ * Fix ifup regression calling dhclient before IPv6 link-locals are
+ available on interface.
+ (Closes: #1088852)
+ * Fix execable() returning false for scripts in lib(exec) causing the
+ above regressions. This underlying bug was introduced in 0.8.42.
+ * Add myself to Uploaders.
+
+ -- Daniel Gröber <dxld@darkboxed.org> Thu, 08 Jan 2026 14:17:04 +0100
+
ifupdown (0.8.44) unstable; urgency=low
[ Debian Janitor ]
diff -Nru ifupdown-0.8.44/debian/control ifupdown-0.8.44+deb13u1/debian/control
--- ifupdown-0.8.44/debian/control 2024-09-17 14:07:12.000000000 +0200
+++ ifupdown-0.8.44+deb13u1/debian/control 2026-01-08 14:16:10.000000000 +0100
@@ -2,7 +2,10 @@
Section: admin
Priority: important
Maintainer: Debian Networking Team <team+networking@tracker.debian.org>
-Uploaders: Josué Ortega <josue@debian.org>, Santiago Ruano Rincón <santiago@debian.org>
+Uploaders:
+ Daniel Gröber <dxld@darkboxed.org>,
+ Josué Ortega <josue@debian.org>,
+ Santiago Ruano Rincón <santiago@debian.org>,
Standards-Version: 4.6.1
Build-Depends: debhelper-compat (= 13)
Vcs-Git: https://salsa.debian.org/debian/ifupdown.git
diff -Nru ifupdown-0.8.44/execute.c ifupdown-0.8.44+deb13u1/execute.c
--- ifupdown-0.8.44/execute.c 2024-08-20 04:02:23.000000000 +0200
+++ ifupdown-0.8.44+deb13u1/execute.c 2026-01-08 14:16:10.000000000 +0100
@@ -104,7 +104,7 @@
*ppch++ = setlocalenv("%s=%s", "MODE", mode);
*ppch++ = setlocalenv("%s=%s", "PHASE", phase);
*ppch++ = setlocalenv("%s=%s", "VERBOSITY", verbose ? "1" : "0");
- *ppch++ = setlocalenv("%s=%s", "PATH", PKGLIBDIR ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin");
+ *ppch++ = setlocalenv("%s=%s", "PATH", EXECUTE_LOCAL_PATHLIST);
if (allow_class || do_all)
*ppch++ = setlocalenv("%s=%s", "CLASS", allow_class ? allow_class : "auto");
*ppch = NULL;
diff -Nru ifupdown-0.8.44/header.h ifupdown-0.8.44+deb13u1/header.h
--- ifupdown-0.8.44/header.h 2024-08-20 04:02:23.000000000 +0200
+++ ifupdown-0.8.44+deb13u1/header.h 2026-01-08 14:16:10.000000000 +0100
@@ -100,6 +100,8 @@
#define RUN_DIR "/run/network/"
#endif
+#define EXECUTE_LOCAL_PATHLIST (PKGLIBDIR ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
+
#ifndef LO_IFACE
#define LO_IFACE "lo"
#endif
Attachment:
signature.asc
Description: PGP signature