diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-07-03 11:53:21 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-07-03 12:18:44 +0200 |
commit | 993e8da4960837cf68bfc1680841b089df435d66 (patch) | |
tree | 4dcdafe43de8dee0801c3287c1665dbd38e34d87 /pkgs | |
parent | 3614b34c6a66d86f579578a49ca438b756934225 (diff) | |
download | nixlib-993e8da4960837cf68bfc1680841b089df435d66.tar nixlib-993e8da4960837cf68bfc1680841b089df435d66.tar.gz nixlib-993e8da4960837cf68bfc1680841b089df435d66.tar.bz2 nixlib-993e8da4960837cf68bfc1680841b089df435d66.tar.lz nixlib-993e8da4960837cf68bfc1680841b089df435d66.tar.xz nixlib-993e8da4960837cf68bfc1680841b089df435d66.tar.zst nixlib-993e8da4960837cf68bfc1680841b089df435d66.zip |
dhcpcd: Update to 6.4.0
The lxc_ro_promote_secondaries patch no longer applies so I disabled it for now (@offlinehacker).
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/tools/networking/dhcpcd/check-interface.patch | 48 | ||||
-rw-r--r-- | pkgs/tools/networking/dhcpcd/default.nix | 6 | ||||
-rw-r--r-- | pkgs/tools/networking/dhcpcd/reload.patch | 4 |
3 files changed, 41 insertions, 17 deletions
diff --git a/pkgs/tools/networking/dhcpcd/check-interface.patch b/pkgs/tools/networking/dhcpcd/check-interface.patch index 2b732b740ad4..11685c0d45e4 100644 --- a/pkgs/tools/networking/dhcpcd/check-interface.patch +++ b/pkgs/tools/networking/dhcpcd/check-interface.patch @@ -1,24 +1,44 @@ -Index: dhcpcd.c -================================================================== ---- a/dhcpcd.c -+++ b/dhcpcd.c -@@ -747,14 +747,14 @@ - if (ifp->hwlen != 0) - memcpy(ifl->hwaddr, ifp->hwaddr, ifl->hwlen); +Fix a segfault in handle_interface: if we're adding an interface that +we already knew about (in particular due to a udev event), then +calling init_state/start_interface on ifp is bad because we later free +ifp. This leads to messages like: + + dhcpcd[1342]: eth0: IAID conflicts with one assigned to eth0 + +and then a crash: + + Invalid read of size 8 + at 0x41CD07: dhcp_handlepacket (dhcp.c:2555) + by 0x408A74: eloop_start (eloop.c:399) + by 0x4073B6: main (dhcpcd.c:1537) + + Address 0x54573d8 is 200 bytes inside a block of size 232 free'd + at 0x4C27507: free (in /nix/store/jafbjc2y6izmh3sk78fl65n55jll4mj8-valgrind-3.9.0/lib/valgrind/vgpreload_memcheck-amd64-linux.so) + by 0x40F0A8: free_interface (net.c:153) + by 0x405443: handle_interface (dhcpcd.c:764) by 0x57E0F06: ??? (udev.c:97) + by 0x42EB62: dev_handle_data (dev.c:153) + by 0x408A74: eloop_start (eloop.c:399) + by 0x4073B6: main (dhcpcd.c:1537) + +So ignore interfaces that we already know about. + +diff -ru -x '*~' dhcpcd-6.4.0-orig/dhcpcd.c dhcpcd-6.4.0/dhcpcd.c +--- dhcpcd-6.4.0-orig/dhcpcd.c 2014-06-14 22:13:12.000000000 +0200 ++++ dhcpcd-6.4.0/dhcpcd.c 2014-07-03 11:13:39.133186533 +0200 +@@ -774,11 +774,11 @@ } else { TAILQ_REMOVE(ifs, ifp, next); TAILQ_INSERT_TAIL(ctx->ifaces, ifp, next); - } -- if (action == 1) { +- if (action > 0) { - init_state(ifp, ctx->argc, ctx->argv); -- start_interface(ifp); -+ if (action == 1) { +- run_preinit(ifp); +- dhcpcd_startinterface(ifp); ++ if (action > 0) { + init_state(ifp, ctx->argc, ctx->argv); -+ start_interface(ifp); ++ run_preinit(ifp); ++ dhcpcd_startinterface(ifp); + } } } - /* Free our discovered list */ - while ((ifp = TAILQ_FIRST(ifs))) { - diff --git a/pkgs/tools/networking/dhcpcd/default.nix b/pkgs/tools/networking/dhcpcd/default.nix index 40f6538750f1..c3eeb20a2dea 100644 --- a/pkgs/tools/networking/dhcpcd/default.nix +++ b/pkgs/tools/networking/dhcpcd/default.nix @@ -1,14 +1,14 @@ { stdenv, fetchurl, pkgconfig, udev }: stdenv.mkDerivation rec { - name = "dhcpcd-6.3.2"; + name = "dhcpcd-6.4.0"; src = fetchurl { url = "http://roy.marples.name/downloads/dhcpcd/${name}.tar.bz2"; - sha256 = "1v2m5wdr6x5cz6i0n1y63am9dhj5j7ylrk717scjgwwjdbq1x75n"; + sha256 = "04whlqg1lik1c690kpgmw5hh6qzim64bw0l4fpr4vb8cj74aj4q4"; }; - patches = [ ./lxc_ro_promote_secondaries.patch ./reload.patch ./check-interface.patch ]; + patches = [ /* ./lxc_ro_promote_secondaries.patch */ ./reload.patch ./check-interface.patch ]; buildInputs = [ pkgconfig udev ]; diff --git a/pkgs/tools/networking/dhcpcd/reload.patch b/pkgs/tools/networking/dhcpcd/reload.patch index 0ecb75a44760..126ad105cbbf 100644 --- a/pkgs/tools/networking/dhcpcd/reload.patch +++ b/pkgs/tools/networking/dhcpcd/reload.patch @@ -1,3 +1,7 @@ +Fix segfault when reloading the configuration: free_globals() left the +ifac/ifdc variables at -1 instead of 0, causing a crash later in +splitv(). + --- a/dhcpcd.c +++ b/dhcpcd.c @@ -143,16 +143,18 @@ |