Re: [PATCH v6 net-next 11/15] net: catch errors from dev_get_stats
From: Saeed Mahameed <saeed@kernel.org>
Date: 2021-01-12 00:34:19
On Tue, 2021-01-12 at 01:15 +0200, Vladimir Oltean wrote:
On Mon, Jan 11, 2021 at 02:54:50PM -0800, Saeed Mahameed wrote:quoted
On Sat, 2021-01-09 at 19:26 +0200, Vladimir Oltean wrote:quoted
From: Vladimir Oltean <vladimir.oltean@nxp.com> dev_get_stats can now return error codes. Convert all remaining call sites to look at that error code and stop processing. The effects of simulating a kernel error (returning -ENOMEM) upon existing programs or kernel interfaces: - ifconfig and "cat /proc/net/dev" print up until the interface that failed, and there they return: cat: read error: Cannot allocate memory - ifstat and "ip -s -s link show": RTNETLINK answers: Cannot allocate memory Dump terminated Some call sites are coming from a context that returns void (ethtool stats, workqueue context). So since we can't report to the upper layer, do the next best thing: print an error to the console.another concern, one buggy netdev driver in a system will cause unnecessary global failures when reading stats via netlink/procfs for all the netdev in a netns, when other drivers will be happy to report. can't we just show a message in that driver's stats line about the occurred err ? and show the normal stats line of all others ?So you're worried that user space apps won't handle an error code when reading from a file, but you're not worried that they'll start scraping junk from procfs when we print this?
both are equivalently concerning. to avoid any user crashes, we can just toss failed netdevs out from the output.
cat /proc/net/dev
Inter-
| Receive | Transmi
t
face |bytes packets errs drop fifo frame compressed
multicast|bytes packets errs drop fifo colls carrier compressed
lo: 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
bond0: Cannot allocate memory
sit0: 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0