nl80211: Missing sysctl flags aren't fatal

The relevant flags were only added in Linux 4.6, so we shouldn't
complain because they're missing. Also, they're always missing if a
device is being removed (e.g., 'iw dev wlan0 del', or if the device is
in the process of resetting itself). So kill those 2 birds with 1 stone:
if we can't find the file, just silently skip it.

Also, we probably should *actually* propagate the error if we had a
write failure.

Signed-off-by: Brian Norris <briannorris@chromium.org>
This commit is contained in:
Brian Norris 2019-07-16 16:43:21 -07:00 committed by Jouni Malinen
parent 96e60047c9
commit 3b726df827
1 changed files with 19 additions and 4 deletions

View File

@ -10746,22 +10746,37 @@ static int nl80211_write_to_file(const char *name, unsigned int val)
{
int fd, len;
char tmp[128];
int ret = 0;
fd = open(name, O_RDWR);
if (fd < 0) {
wpa_printf(MSG_ERROR, "nl80211: Failed to open %s: %s",
int level;
/*
* Flags may not exist on older kernels, or while we're tearing
* down a disappearing device.
*/
if (errno == ENOENT) {
ret = 0;
level = MSG_DEBUG;
} else {
ret = -1;
level = MSG_ERROR;
}
wpa_printf(level, "nl80211: Failed to open %s: %s",
name, strerror(errno));
return fd;
return ret;
}
len = os_snprintf(tmp, sizeof(tmp), "%u\n", val);
len = write(fd, tmp, len);
if (len < 0)
if (len < 0) {
ret = -1;
wpa_printf(MSG_ERROR, "nl80211: Failed to write to %s: %s",
name, strerror(errno));
}
close(fd);
return 0;
return ret;
}