sysctl: Don't crash file fopen fails
The commit referenced below put a setvbuf() before checking what
fopen() returned. If the file could not be opened then the file
handle was NULL at setvbuf() crashed.
setvbuf() is now called after checking what fopen() returns and only
when it was successful.
References:
procps-ng/procps#76
commit 58ae084c27
This commit is contained in:
parent
a2c296224c
commit
8882afa047
1
NEWS
1
NEWS
@ -11,6 +11,7 @@ procps-ng-NEXT
|
||||
* ps: recognizes SCHED_DEADLINE as valid CPU scheduler
|
||||
* ps: display NUMA node under which a thread ran issue #58
|
||||
* sysctl: Permit empty string for value issue #74
|
||||
* sysctl: Don't segv when file not available issue #76
|
||||
* top: add config file support for XDG specification
|
||||
* top: eliminated minor libnuma memory leak
|
||||
* top: show fewer memory decimal places (configurable) issue #50
|
||||
|
6
sysctl.c
6
sysctl.c
@ -220,9 +220,6 @@ static int ReadSetting(const char *restrict const name)
|
||||
|
||||
fp = fopen(tmpname, "r");
|
||||
|
||||
if (iobuf)
|
||||
setvbuf(fp, iobuf, _IOFBF, IOBUFSIZ);
|
||||
|
||||
if (!fp) {
|
||||
switch (errno) {
|
||||
case ENOENT:
|
||||
@ -244,6 +241,9 @@ static int ReadSetting(const char *restrict const name)
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (iobuf)
|
||||
setvbuf(fp, iobuf, _IOFBF, IOBUFSIZ);
|
||||
|
||||
errno = 0;
|
||||
if (fgets(inbuf, sizeof inbuf - 1, fp)) {
|
||||
/* this loop is required, see
|
||||
|
Loading…
Reference in New Issue
Block a user