From 6bac11d99322f3cdf751b43dc3b3456039fab26c Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Sun, 23 Feb 1997 22:09:31 +0000 Subject: (__libc_argv, __libc_argc): Make extern. (__hurd_threadvar_max, __hurd_threadvar_stack_offset, __hurd_threadvar_stack_mask): New variables. --- sysdeps/mach/hurd/chroot.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'sysdeps/mach/hurd/chroot.c') diff --git a/sysdeps/mach/hurd/chroot.c b/sysdeps/mach/hurd/chroot.c index f010c368ed..c39493e272 100644 --- a/sysdeps/mach/hurd/chroot.c +++ b/sysdeps/mach/hurd/chroot.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -28,7 +28,8 @@ Cambridge, MA 02139, USA. */ int DEFUN(chroot, (file_name), CONST char *file_name) { - file_t file, dir; + error_t err; + file_t file, dir, root; file = __file_name_lookup (file_name, O_EXEC, 0); if (file == MACH_PORT_NULL) @@ -38,6 +39,12 @@ DEFUN(chroot, (file_name), CONST char *file_name) if (dir == MACH_PORT_NULL) return -1; - _hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], dir); + /* Prevent going through DIR's .. */ + err = __file_reparent (dir, MACH_PORT_NULL, &root); + __mach_port_deallocate (__mach_task_self (), dir); + if (err) + return __hurd_fail (err); + + _hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], root); return 0; } -- cgit 1.4.1