[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150111013913.GE22149@ZenIV.linux.org.uk>
Date: Sun, 11 Jan 2015 01:39:13 +0000
From: Al Viro <viro@...IV.linux.org.uk>
To: "Carlos R. Mafra" <crmafra@...il.com>
Cc: LKML <linux-kernel@...r.kernel.org>,
Hauke Mehrtens <hauke@...ke-m.de>,
"John W. Linville" <linville@...driver.com>, netdev@...r.kernel.org
Subject: Re: /proc/net/dev regression
On Sun, Jan 11, 2015 at 01:33:35AM +0000, Carlos R. Mafra wrote:
> I think the problem with wmnet is not that it was expecting the fields
> to be aligned because it never had problems before (when definitely more
> than 10 megabytes were received, wmnet is crappy but not _that_ crappy).
>
> I think the problem really was here,
>
> totalbytes_in = strtoul(&buffer[7], NULL, 10);
>
> After the patch the device name is 8 characters long and &buffer[7]
> overlaps with the name instead of reading the bytes. Before the
> patch is was fine because the call to strtoul() seems correct in the
> sense that it would read everything until the NULL. So more than 10
> megabytes was still ok.
>
> So I guess I was wrong when suggesting that the problem was the
> alignment.
Several lines below there's this:
totalpackets_out = strtoul(&buffer[74], NULL, 10);
if (totalpackets_out != lastpackets_out) {
totalbytes_out = strtoul(&buffer[66], NULL, 10);
diffpackets_out += totalpackets_out - lastpackets_out;
diffbytes_out += totalbytes_out - lastbytes_out;
lastpackets_out = totalpackets_out;
lastbytes_out = totalbytes_out;
tx = True;
}
So I'm afraid it *is* that crappy. This function really should use scanf();
note that updateStats_ipchains() in the same file does just that (well,
fgets()+sscanf() for fsck knows what reason). And I'd be careful with all
those %d, actually - it's not _that_ hard to get more than 4Gb sent.
scanf formats really ought to match the kernel-side (seq_)printf one...
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists