diff options
author | Craig Small <csmall@dropbear.xyz> | 2022-04-26 21:18:03 +1000 |
---|---|---|
committer | Craig Small <csmall@dropbear.xyz> | 2022-04-26 21:18:03 +1000 |
commit | 1f085f5a9f036625696bfa370779232f8f0b769c (patch) | |
tree | 4cd1e4a783d7885da737ee2a45f7499f832d2a79 | |
parent | 581ed4bcab4e48e4711012c6a3f81ad292749f02 (diff) | |
download | procps-ng-1f085f5a9f036625696bfa370779232f8f0b769c.tar.gz |
pmap: Don't reopen stdin for reading file
pmap uses freopen to read /proc/self/maps. There doesn't
seem to be a good reason to do this and if pmap has its
stdin previously closed then it fails.
Signed-off-by: Craig Small <csmall@dropbear.xyz>
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | pmap.c | 9 |
2 files changed, 8 insertions, 2 deletions
@@ -1,6 +1,7 @@ procps-ng-NEXT * library Re-add elogind support merge #151 + * pmap: Dont reuse stdin filehandle issue #231 * ps: threads again display when -L is used with -q issue #234 * ps: proper aix format string behavior was restored * sysctl: print dotted keys again @@ -158,21 +158,25 @@ static void discover_shm_minor(void) void *addr; int shmid; char mapbuf_b[256]; + FILE *fp; - if (!freopen("/proc/self/maps", "r", stdin)) + if ( (fp = fopen("/proc/self/maps", "r")) == NULL) return; /* create */ shmid = shmget(IPC_PRIVATE, 42, IPC_CREAT | 0666); if (shmid == -1) + { /* failed; oh well */ + fclose(fp); return; + } /* attach */ addr = shmat(shmid, NULL, SHM_RDONLY); if (addr == (void *)-1) goto out_destroy; - while (fgets(mapbuf_b, sizeof mapbuf_b, stdin)) { + while (fgets(mapbuf_b, sizeof mapbuf_b, fp)) { char perms[32]; /* to clean up unprintables */ char *tmp; @@ -207,6 +211,7 @@ static void discover_shm_minor(void) perror(_("shared memory detach")); out_destroy: + fclose(fp); if (shmctl(shmid, IPC_RMID, NULL) && errno != EINVAL) perror(_("shared memory remove")); |