Re: 2.6.35-rc4-git3: Reported regressions from 2.6.34

From: Eric Dumazet
Date: Fri Jul 09 2010 - 01:29:55 EST


Le jeudi 08 juillet 2010 Ã 21:34 -0700, David Miller a Ãcrit :
> From: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Date: Thu, 8 Jul 2010 18:34:25 -0700
>
> > On Thu, Jul 8, 2010 at 4:33 PM, Rafael J. Wysocki <rjw@xxxxxxx> wrote:
> >>
> >> Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=16187
> >> Subject : Carrier detection failed in dhcpcd when link is up
> >> Submitter : Christian Casteyde <casteyde.christian@xxxxxxx>
> >> Date : 2010-06-12 15:15 (27 days old)
> >> First-Bad-Commit: http://git.kernel.org/linus/10708f37ae729baba9b67bd134c3720709d4ae62
> >> Handled-By : Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> >
> > David? This bisects to a networking commit. Doesn't look sensible, but
> > what do I know?
>
> My suspicion is that dhcpd uses netlink to dump the info of the
> available links, and due to some bug gets confused with the new 64-bit
> statistic netlink attribute being there now.
> a second to have a look at this.

It could be a dhcpcd bug because of extended size of answer

According to strace, dhcpcd tries a recvmsg() call with
a 256 bytes buffer to hold answer.

Looking at current dhcpcd source, I confirm it cannot realloc its buffer

static int
get_netlink(int fd, int flags,
int (*callback)(struct nlmsghdr *))
{
char *buffer = NULL;
ssize_t bytes;
struct nlmsghdr *nlm;
int r = -1;

buffer = xzalloc(sizeof(char) * BUFFERLEN);
for (;;) {
bytes = recv(fd, buffer, BUFFERLEN, flags);
if (bytes == -1) {
if (errno == EAGAIN) {
r = 0;
goto eexit;
}
if (errno == EINTR)
continue;
goto eexit;
}


This program needs to fix this.


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/