From owner-svn-src-stable@FreeBSD.ORG Tue Mar 1 21:51:32 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 84E4C106566C; Tue, 1 Mar 2011 21:51:32 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7209D8FC08; Tue, 1 Mar 2011 21:51:32 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p21LpWQf063199; Tue, 1 Mar 2011 21:51:32 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p21LpWTq063194; Tue, 1 Mar 2011 21:51:32 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201103012151.p21LpWTq063194@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 1 Mar 2011 21:51:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r219155 - in stable/8/sys: amd64/linux32 compat/freebsd32 X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Mar 2011 21:51:32 -0000 Author: kib Date: Tue Mar 1 21:51:32 2011 New Revision: 219155 URL: http://svn.freebsd.org/changeset/base/219155 Log: MFC r210431: Remove the linux_exec_copyin_args(), freebsd32_exec_copyin_args() may serve as well. COMPAT_FREEBSD32 is a prerequisite for COMPAT_LINUX32. MFC r210451: Use forward declartion for enum uio_seg in imgact.h. This allows to remove inclusion of sys/uio.h from the header. MFC r210498: Revert r210451, and the similar part of the r210431. The forward-declaration for the enum tag when enum definition is not complete is not allowed by C99, and is gcc extension. MFC r210501: Remove unneeded includes. Requested by: dchagin Modified: stable/8/sys/amd64/linux32/linux32_machdep.c stable/8/sys/amd64/linux32/syscalls.master stable/8/sys/compat/freebsd32/freebsd32_misc.c stable/8/sys/compat/freebsd32/freebsd32_util.h Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/amd64/linux32/linux32_machdep.c ============================================================================== --- stable/8/sys/amd64/linux32/linux32_machdep.c Tue Mar 1 21:48:22 2011 (r219154) +++ stable/8/sys/amd64/linux32/linux32_machdep.c Tue Mar 1 21:51:32 2011 (r219155) @@ -60,10 +60,9 @@ __FBSDID("$FreeBSD$"); #include #include -#include -#include #include +#include #include #include #include @@ -107,105 +106,6 @@ bsd_to_linux_sigaltstack(int bsa) return (lsa); } -/* - * Custom version of exec_copyin_args() so that we can translate - * the pointers. - */ -static int -linux_exec_copyin_args(struct image_args *args, char *fname, - enum uio_seg segflg, char **argv, char **envv) -{ - char *argp, *envp; - u_int32_t *p32, arg; - size_t length; - int error; - - bzero(args, sizeof(*args)); - if (argv == NULL) - return (EFAULT); - - /* - * Allocate temporary demand zeroed space for argument and - * environment strings - */ - args->buf = (char *)kmem_alloc_wait(exec_map, - PATH_MAX + ARG_MAX + MAXSHELLCMDLEN); - if (args->buf == NULL) - return (ENOMEM); - args->begin_argv = args->buf; - args->endp = args->begin_argv; - args->stringspace = ARG_MAX; - - args->fname = args->buf + ARG_MAX; - - /* - * Copy the file name. - */ - error = (segflg == UIO_SYSSPACE) ? - copystr(fname, args->fname, PATH_MAX, &length) : - copyinstr(fname, args->fname, PATH_MAX, &length); - if (error != 0) - goto err_exit; - - /* - * extract arguments first - */ - p32 = (u_int32_t *)argv; - for (;;) { - error = copyin(p32++, &arg, sizeof(arg)); - if (error) - goto err_exit; - if (arg == 0) - break; - argp = PTRIN(arg); - error = copyinstr(argp, args->endp, args->stringspace, &length); - if (error) { - if (error == ENAMETOOLONG) - error = E2BIG; - - goto err_exit; - } - args->stringspace -= length; - args->endp += length; - args->argc++; - } - - args->begin_envv = args->endp; - - /* - * extract environment strings - */ - if (envv) { - p32 = (u_int32_t *)envv; - for (;;) { - error = copyin(p32++, &arg, sizeof(arg)); - if (error) - goto err_exit; - if (arg == 0) - break; - envp = PTRIN(arg); - error = copyinstr(envp, args->endp, args->stringspace, - &length); - if (error) { - if (error == ENAMETOOLONG) - error = E2BIG; - goto err_exit; - } - args->stringspace -= length; - args->endp += length; - args->envc++; - } - } - - return (0); - -err_exit: - kmem_free_wakeup(exec_map, (vm_offset_t)args->buf, - PATH_MAX + ARG_MAX + MAXSHELLCMDLEN); - args->buf = NULL; - return (error); -} - int linux_execve(struct thread *td, struct linux_execve_args *args) { @@ -220,8 +120,8 @@ linux_execve(struct thread *td, struct l printf(ARGS(execve, "%s"), path); #endif - error = linux_exec_copyin_args(&eargs, path, UIO_SYSSPACE, args->argp, - args->envp); + error = freebsd32_exec_copyin_args(&eargs, path, UIO_SYSSPACE, + args->argp, args->envp); free(path, M_TEMP); if (error == 0) error = kern_execve(td, &eargs, NULL); Modified: stable/8/sys/amd64/linux32/syscalls.master ============================================================================== --- stable/8/sys/amd64/linux32/syscalls.master Tue Mar 1 21:48:22 2011 (r219154) +++ stable/8/sys/amd64/linux32/syscalls.master Tue Mar 1 21:51:32 2011 (r219155) @@ -54,8 +54,8 @@ l_int mode); } 9 AUE_LINK STD { int linux_link(char *path, char *to); } 10 AUE_UNLINK STD { int linux_unlink(char *path); } -11 AUE_EXECVE STD { int linux_execve(char *path, char **argp, \ - char **envp); } +11 AUE_EXECVE STD { int linux_execve(char *path, u_int32_t *argp, \ + u_int32_t *envp); } 12 AUE_CHDIR STD { int linux_chdir(char *path); } 13 AUE_NULL STD { int linux_time(l_time_t *tm); } 14 AUE_MKNOD STD { int linux_mknod(char *path, l_int mode, \ Modified: stable/8/sys/compat/freebsd32/freebsd32_misc.c ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_misc.c Tue Mar 1 21:48:22 2011 (r219154) +++ stable/8/sys/compat/freebsd32/freebsd32_misc.c Tue Mar 1 21:51:32 2011 (r219155) @@ -265,7 +265,7 @@ freebsd32_sigaltstack(struct thread *td, * Custom version of exec_copyin_args() so that we can translate * the pointers. */ -static int +int freebsd32_exec_copyin_args(struct image_args *args, char *fname, enum uio_seg segflg, u_int32_t *argv, u_int32_t *envv) { Modified: stable/8/sys/compat/freebsd32/freebsd32_util.h ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_util.h Tue Mar 1 21:48:22 2011 (r219154) +++ stable/8/sys/compat/freebsd32/freebsd32_util.h Tue Mar 1 21:51:32 2011 (r219155) @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -101,5 +102,8 @@ int freebsd32_copyiniov(struct iovec32 * struct iovec **iov, int error); void freebsd32_rusage_out(const struct rusage *s, struct rusage32 *s32); +struct image_args; +int freebsd32_exec_copyin_args(struct image_args *args, char *fname, + enum uio_seg segflg, u_int32_t *argv, u_int32_t *envv); #endif /* !_COMPAT_FREEBSD32_FREEBSD32_UTIL_H_ */