From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v2] pppd: Provide error() implementation in pppoe-discovery
Date: Fri, 28 Oct 2016 15:24:19 +0200 [thread overview]
Message-ID: <20161028152419.6ffba279@free-electrons.com> (raw)
In-Reply-To: <1477248598-6052-1-git-send-email-Stefan.Nickl@gmail.com>
Hello,
On Sun, 23 Oct 2016 20:49:58 +0200, stefan.nickl at gmail.com wrote:
> From: Stefan Nickl <Stefan.Nickl@gmail.com>
>
> The pppoe-discovery program calls error() from the CHECK_ROOM macro
> defined in pppoe.h. Since pppoe-discovery is a standalone program not
> linked with the rest of pppd, the only way this could build is by
> linking to glibc's proprietary error(3) function instead of the function
> of the same name (but with different arguments) defined in pppd/utils.c.
>
> So with glibc and uClibc this builds, but will probably crash when the
> assertion is triggered. As the assertion is unlikely to fail, nobody has
> noticed. The build however fails with musl libc since it doesn't
> provide the doppelganger.
What do you mean by doppelganger?
> diff --git a/package/pppd/0002-rp-pppoe-error.patch b/package/pppd/0002-rp-pppoe-error.patch
> new file mode 100644
> index 0000000..f103f4d
> --- /dev/null
> +++ b/package/pppd/0002-rp-pppoe-error.patch
> @@ -0,0 +1,27 @@
> +diff --git a/pppd/plugins/rp-pppoe/pppoe-discovery.c b/pppd/plugins/rp-pppoe/pppoe-discovery.c
> +index 3d3bf4e..55037df 100644
> +--- a/pppd/plugins/rp-pppoe/pppoe-discovery.c
> ++++ b/pppd/plugins/rp-pppoe/pppoe-discovery.c
The patch lacks a description + Signed-off-by.
> +@@ -9,6 +9,7 @@
> + *
> + */
> +
> ++#include <stdarg.h>
> + #include <stdio.h>
> + #include <stdlib.h>
> + #include <unistd.h>
> +@@ -55,6 +56,14 @@ void die(int status)
> + exit(status);
> + }
> +
> ++void error(char *fmt, ...)
> ++{
> ++ va_list pvar;
> ++ va_start(pvar, fmt);
> ++ vfprintf(stderr, fmt, pvar);
> ++ va_end(pvar);
> ++}
This really doesn't seem like the right approach, for several reasons:
- There is already a function with the same name provided in the C
library, which means static linking scenarios will no longer work,
as you'll have clashing symbols.
- The rest of the pppoe-discovery code is using perror(), which is
provided by the C library. So I believe the better fix is to change
the CHECK_ROOM() macro to use the perror() function instead.
Could you rework your patch accordingly?
Thanks a lot,
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
next prev parent reply other threads:[~2016-10-28 13:24 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-23 18:49 [Buildroot] [PATCH v2] pppd: Provide error() implementation in pppoe-discovery stefan.nickl at gmail.com
2016-10-28 13:24 ` Thomas Petazzoni [this message]
2016-11-01 21:24 ` Stefan Nickl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161028152419.6ffba279@free-electrons.com \
--to=thomas.petazzoni@free-electrons.com \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox