wpa_supplicant: garbled log

Jouni Malinen j
Sat Sep 28 02:37:49 PDT 2013


On Sat, Sep 28, 2013 at 03:51:45AM +0200, Denys Vlasenko wrote:
> I'm running wpa_supplicant in a way where both
> its stdout and stderr go to the same file descriptor,
> which isn't a tty. IOW, I do this:

> Clearly, it was a perror("ioctl[SIOCSIWFREQ]"), and stdout
> buffer happened to be not on a line boundary when perror()
> sent its message to stderr.
> 
> This would not be noticed if stdout and stderr are separate,
> or if they print to a tty, since in this case they are initialized
> to line buffered mode.

stderr should not really be used, i.e., all the perror() calls should
really be replace with something like wpa_printf(MSG_ERROR, "msg..: %s",
strerror(errno)).

> One possible fix is to call  setlinebuf(stdout)  somewhere early
> in main(); another is to fflush(stdout) or fflush(NULL) before
> every perror().
> 
> Since wpa_supplicant doesn't print megabytes of log per second
> and shouldn't worry about high efficiency of writing its stdout
> I think using  setlinebuf(stdout)  is quite ok.

This is not really desirable for number of P2P operations that do depend
on timing quite a bit. Getting rid of perror() (and other users of
stderr, if any) would be better approach.
 
-- 
Jouni Malinen                                            PGP id EFC895FA



More information about the Hostap mailing list