use the correct size of the execve syscall stub
authorderaadt <deraadt@openbsd.org>
Mon, 27 Feb 2023 15:00:17 +0000 (15:00 +0000)
committerderaadt <deraadt@openbsd.org>
Mon, 27 Feb 2023 15:00:17 +0000 (15:00 +0000)
lib/libc/dlfcn/Makefile.inc
lib/libc/dlfcn/init.c

index 6605c7f..17df76e 100644 (file)
@@ -1,7 +1,9 @@
-#      $OpenBSD: Makefile.inc,v 1.5 2016/05/07 19:05:22 guenther Exp $
+#      $OpenBSD: Makefile.inc,v 1.6 2023/02/27 15:00:17 deraadt Exp $
 
 .PATH: ${LIBCSRCDIR}/dlfcn
 
 .include <bsd.own.mk>
 
 SRCS+=         dlfcn_stubs.c init.c tib.c
+
+init.o init.po:        _execvesize.c
index db23b56..c6d4701 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: init.c,v 1.17 2023/02/24 16:30:19 deraadt Exp $ */
+/*     $OpenBSD: init.c,v 1.18 2023/02/27 15:00:17 deraadt Exp $ */
 /*
  * Copyright (c) 2014,2015 Philip Guenther <guenther@openbsd.org>
  *
@@ -150,9 +150,11 @@ _libc_preinit(int argc, char **argv, char **envp, dl_cb_cb *cb)
                setup_static_tib(phdr, phnum);
 
 #if !defined(__hppa__)
-               /* XXX 128 maximum size of a system call stub, hopefully */
-               if (&HIDDEN(execve))
-                       pinsyscall(SYS_execve, &HIDDEN(execve), 128);
+               if (&HIDDEN(execve)) {
+                       extern const int _execve_size;
+
+                       pinsyscall(SYS_execve, &HIDDEN(execve), _execve_size);
+               }
 #endif
        }