ok?

Index: kern/sysv_shm.c
===================================================================
RCS file: /cvs/src/sys/kern/sysv_shm.c,v
retrieving revision 1.69
diff -u -p -r1.69 sysv_shm.c
--- kern/sysv_shm.c     15 Sep 2016 02:00:16 -0000      1.69
+++ kern/sysv_shm.c     11 Dec 2018 16:42:55 -0000
@@ -506,16 +506,18 @@ shmexit(struct vmspace *vm)
 {
        struct shmmap_head *shmmap_h;
        struct shmmap_state *shmmap_s;
+       size_t size;
        int i;
 
        shmmap_h = (struct shmmap_head *)vm->vm_shm;
        if (shmmap_h == NULL)
                return;
+       size = sizeof(int) + shmmap_h->shmseg * sizeof(struct shmmap_state);
        for (i = 0, shmmap_s = shmmap_h->state; i < shmmap_h->shmseg;
            i++, shmmap_s++)
                if (shmmap_s->shmid != -1)
                        shm_delete_mapping(vm, shmmap_s);
-       free(vm->vm_shm, M_SHM, 0);
+       free(vm->vm_shm, M_SHM, size);
        vm->vm_shm = NULL;
 }
 
@@ -594,7 +596,8 @@ sysctl_sysvshm(int *name, u_int namelen,
                    M_SHM, M_WAITOK|M_ZERO);
                memcpy(newsegs, shmsegs,
                    shminfo.shmmni * sizeof(struct shmid_ds *));
-               free(shmsegs, M_SHM, 0);
+               free(shmsegs, M_SHM,
+                   shminfo.shmmni * sizeof(struct shmid_ds *));
                shmsegs = newsegs;
                newseqs = mallocarray(val, sizeof(unsigned short), M_SHM,
                    M_WAITOK|M_ZERO);

Reply via email to