diff options
author | 2015-09-28 20:32:59 +0000 | |
---|---|---|
committer | 2015-09-28 20:32:59 +0000 | |
commit | 7da957a54b2ce3a1a6ccaa9268622ac16a8a07aa (patch) | |
tree | dfa5002c5c25e84bfe5c28b153bd179919971be4 /sys/kern/exec_elf.c | |
parent | easy size for free(); ok beck (diff) | |
download | wireguard-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.c | 7 |
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); |