On Monday 08 July 2013 13:28:29 Johannes Stezenbach wrote:
> ifplugd exits with error on newer kernels:
> 
> [ 1264.692730] libphy: eth0 - Link is Down
> ifplugd(eth0): netlink packet too small or truncated
> ifplugd(eth0): exiting
> 
> I found a fix for a similar issue here, it increases
> buffer size from 2048 to 4096:
> https://bugs.launchpad.net/ubuntu/+source/ifmetric/+bug/896584
> 
> 
> --- busybox-1.21.0/networking/ifplugd.c.orig  2012-12-22 23:39:01.000000000 
> +0100
> +++ busybox-1.21.0/networking/ifplugd.c       2013-07-08 13:12:54.372062361 
> +0200
> @@ -451,7 +451,7 @@ static smallint detect_link(void)
>  static NOINLINE int check_existence_through_netlink(void)
>  {
>       int iface_len;
> -     char replybuf[1024];
> +     char replybuf[4096];
>  
>       iface_len = strlen(G.iface);
>       while (1) {

Hi,
can you try if the attached patch fixes your problem.
Compiled and tested on my box where it works (as before):

debian:~/Desktop/SourceCode/busybox$ ./busybox ifplugd -naIM eth0
ifplugd(eth0): started: BusyBox v1.22.0.git (2013-06-30 11:08:29 CEST)
ifplugd(eth0): using IFF_RUNNING detection mode
ifplugd(eth0): interface exists
ifplugd(eth0): link is up
ifplugd(eth0): executing '/etc/ifplugd/ifplugd.action eth0 up'
ifplugd(eth0): exit code: 255
ifplugd(eth0): link is down
ifplugd(eth0): executing '/etc/ifplugd/ifplugd.action eth0 down'
ifplugd(eth0): exit code: 255
ifplugd(eth0): link is up
ifplugd(eth0): executing '/etc/ifplugd/ifplugd.action eth0 up'
ifplugd(eth0): exit code: 255
^Cifplugd(eth0): executing '/etc/ifplugd/ifplugd.action eth0 down'
ifplugd(eth0): exit code: 255
ifplugd(eth0): exiting

Hope this helps.
Ciao,
Tito


diff -uNp networking/ifplugd.c.orig networking/ifplugd.c 
--- networking/ifplugd.c.orig   2013-07-08 22:51:22.748468426 +0200
+++ networking/ifplugd.c        2013-07-08 22:52:45.687231145 +0200
@@ -448,10 +448,12 @@ static smallint detect_link(void)
        return status;
 }
 
+#define MAX_PAYLOAD 1024  /* maximum payload size*/
+
 static NOINLINE int check_existence_through_netlink(void)
 {
        int iface_len;
-       char replybuf[1024];
+       char replybuf[NLMSG_SPACE(MAX_PAYLOAD)];
 
        iface_len = strlen(G.iface);
        while (1) {
Fix size of buffer to fit aligned header and payload of
netlink message.

Signed-off-by: Tito Ragusa <farmat...@tiscali.it>

--- networking/ifplugd.c.orig	2013-07-08 22:51:22.748468426 +0200
+++ networking/ifplugd.c	2013-07-08 22:52:45.687231145 +0200
@@ -448,10 +448,12 @@ static smallint detect_link(void)
 	return status;
 }
 
+#define MAX_PAYLOAD 1024  /* maximum payload size*/
+
 static NOINLINE int check_existence_through_netlink(void)
 {
 	int iface_len;
-	char replybuf[1024];
+	char replybuf[NLMSG_SPACE(MAX_PAYLOAD)];
 
 	iface_len = strlen(G.iface);
 	while (1) {
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to