summaryrefslogtreecommitdiffstats
path: root/sys/kern/exec_elf.c
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>2015-09-28 20:32:59 +0000
committerderaadt <deraadt@openbsd.org>2015-09-28 20:32:59 +0000
commit7da957a54b2ce3a1a6ccaa9268622ac16a8a07aa (patch)
treedfa5002c5c25e84bfe5c28b153bd179919971be4 /sys/kern/exec_elf.c
parenteasy size for free(); ok beck (diff)
downloadwireguard-openbsd-7da957a54b2ce3a1a6ccaa9268622ac16a8a07aa.tar.xz
wireguard-openbsd-7da957a54b2ce3a1a6ccaa9268622ac16a8a07aa.zip
Track size of an opaque allocation to pass to free() later
ok guenther tedu
Diffstat (limited to 'sys/kern/exec_elf.c')
-rw-r--r--sys/kern/exec_elf.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/kern/exec_elf.c b/sys/kern/exec_elf.c
index bc827f45011..4c0c5ee2079 100644
--- a/sys/kern/exec_elf.c
+++ b/sys/kern/exec_elf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: exec_elf.c,v 1.116 2015/04/30 11:15:28 jsg Exp $ */
+/* $OpenBSD: exec_elf.c,v 1.117 2015/09/28 20:32:59 deraadt Exp $ */
/*
* Copyright (c) 1996 Per Fogelstrom
@@ -759,6 +759,7 @@ ELFNAME2(exec,makecmds)(struct proc *p, struct exec_package *epp)
ap->arg_interp = exe_base;
epp->ep_emul_arg = ap;
+ epp->ep_emul_argsize = sizeof *ap;
epp->ep_interp_pos = pos;
}
@@ -798,7 +799,7 @@ ELFNAME2(exec,fixup)(struct proc *p, struct exec_package *epp)
if (interp &&
(error = ELFNAME(load_file)(p, interp, epp, ap, &pos)) != 0) {
- free(ap, M_TEMP, 0);
+ free(ap, M_TEMP, epp->ep_emul_argsize);
pool_put(&namei_pool, interp);
kill_vmcmds(&epp->ep_vmcmds);
return (error);
@@ -849,7 +850,7 @@ ELFNAME2(exec,fixup)(struct proc *p, struct exec_package *epp)
error = copyout(ai, epp->ep_emul_argp, sizeof ai);
}
- free(ap, M_TEMP, 0);
+ free(ap, M_TEMP, epp->ep_emul_argsize);
if (interp)
pool_put(&namei_pool, interp);
return (error);