]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsipc: don't free shm data if no shm id is found
authorRomain Naour <romain.naour@gmail.com>
Tue, 22 Mar 2016 21:19:54 +0000 (22:19 +0100)
committerKarel Zak <kzak@redhat.com>
Wed, 23 Mar 2016 09:52:41 +0000 (10:52 +0100)
There is a segfault in do_shm_global() when ipc_shm_get_info() return 0 and
ipc_shm_free_info() is called.

When no shm id is found, the memory allocated in shmds by ipc_shm_get_info() is
already free when ipc_shm_free_info() is called.

Move ipc_shm_free_info(shmds) inside the if statement where at least one shm id
is found.

Signed-off-by: Romain Naour <romain.naour@gmail.com>
sys-utils/lsipc.c

index 938728ada0048afb39270515d65e16e3c1fd6243..195ee15de854bb33f5191719867bbe5079e6bcef 100644 (file)
@@ -1071,14 +1071,13 @@ static void do_shm_global(struct libscols_table *tb)
                        ++nsegs;
                        sum_segsz += shmdsp->shm_segsz;
                }
+               ipc_shm_free_info(shmds);
        }
 
        global_set_data(tb, "SHMMNI", _("Shared memory segments"), nsegs, lim.shmmni, 1);
        global_set_data(tb, "SHMALL", _("Shared memory pages"), sum_segsz / getpagesize(), lim.shmall, 1);
        global_set_data(tb, "SHMMAX", _("Max size of shared memory segment (bytes)"), 0, lim.shmmax, 0);
        global_set_data(tb, "SHMMIN", _("Min size of shared memory segment (bytes)"), 0, lim.shmmin, 0);
-
-       ipc_shm_free_info(shmds);
 }
 
 int main(int argc, char *argv[])