svn commit: r195694 - in stable/7: include lib/libc lib/libc/sys
sys sys/compat/freebsd32 sys/contrib/pf sys/kern sys/sys
tools/regression/file tools/regression/file/closefrom
tools/regression/file...
John Baldwin
jhb at FreeBSD.org
Tue Jul 14 19:48:35 UTC 2009
Author: jhb
Date: Tue Jul 14 19:48:31 2009
New Revision: 195694
URL: http://svn.freebsd.org/changeset/base/195694
Log:
MFC: Add a new 'void closefrom(int lowfd)' system call. When called, it
closes any open file descriptors >= 'lowfd'. Bump __FreeBSD_version to
702104.
Added:
stable/7/lib/libc/sys/closefrom.2
- copied unchanged from r194262, head/lib/libc/sys/closefrom.2
stable/7/tools/regression/file/closefrom/
- copied from r194262, head/tools/regression/file/closefrom/
Modified:
stable/7/include/ (props changed)
stable/7/include/unistd.h
stable/7/lib/libc/ (props changed)
stable/7/lib/libc/sys/Makefile.inc
stable/7/lib/libc/sys/Symbol.map
stable/7/lib/libc/sys/close.2
stable/7/sys/ (props changed)
stable/7/sys/compat/freebsd32/syscalls.master
stable/7/sys/contrib/pf/ (props changed)
stable/7/sys/kern/kern_descrip.c
stable/7/sys/kern/syscalls.master
stable/7/sys/sys/param.h
stable/7/tools/regression/file/ (props changed)
stable/7/tools/regression/file/flock/ (props changed)
Modified: stable/7/include/unistd.h
==============================================================================
--- stable/7/include/unistd.h Tue Jul 14 19:45:36 2009 (r195693)
+++ stable/7/include/unistd.h Tue Jul 14 19:48:31 2009 (r195694)
@@ -326,6 +326,7 @@ unsigned int alarm(unsigned int);
int chdir(const char *);
int chown(const char *, uid_t, gid_t);
int close(int);
+void closefrom(int);
int dup(int);
int dup2(int, int);
int eaccess(const char *, int);
Modified: stable/7/lib/libc/sys/Makefile.inc
==============================================================================
--- stable/7/lib/libc/sys/Makefile.inc Tue Jul 14 19:45:36 2009 (r195693)
+++ stable/7/lib/libc/sys/Makefile.inc Tue Jul 14 19:48:31 2009 (r195694)
@@ -63,7 +63,7 @@ MAN+= _exit.2 abort2.2 accept.2 access.2
aio_cancel.2 aio_error.2 aio_read.2 aio_return.2 \
aio_suspend.2 aio_waitcomplete.2 aio_write.2 \
bind.2 brk.2 chdir.2 chflags.2 \
- chmod.2 chown.2 chroot.2 clock_gettime.2 close.2 \
+ chmod.2 chown.2 chroot.2 clock_gettime.2 close.2 closefrom.2 \
connect.2 cpuset.2 cpuset_getaffinity.2 dup.2 execve.2 \
extattr_get_file.2 fcntl.2 fhopen.2 flock.2 fork.2 fsync.2 \
getdirentries.2 getdtablesize.2 \
Modified: stable/7/lib/libc/sys/Symbol.map
==============================================================================
--- stable/7/lib/libc/sys/Symbol.map Tue Jul 14 19:45:36 2009 (r195693)
+++ stable/7/lib/libc/sys/Symbol.map Tue Jul 14 19:48:31 2009 (r195694)
@@ -337,6 +337,7 @@ FBSD_1.0 {
};
FBSD_1.1 {
+ closefrom;
cpuset;
cpuset_getid;
cpuset_setid;
@@ -458,6 +459,8 @@ FBSDprivate_1.0 {
__sys_clock_settime;
_close;
__sys_close;
+ _closefrom;
+ __sys_closefrom;
_connect;
__sys_connect;
_cpuset;
Modified: stable/7/lib/libc/sys/close.2
==============================================================================
--- stable/7/lib/libc/sys/close.2 Tue Jul 14 19:45:36 2009 (r195693)
+++ stable/7/lib/libc/sys/close.2 Tue Jul 14 19:48:31 2009 (r195694)
@@ -120,6 +120,7 @@ before all pending data was delivered.
.El
.Sh SEE ALSO
.Xr accept 2 ,
+.Xr closefrom 2 ,
.Xr execve 2 ,
.Xr fcntl 2 ,
.Xr flock 2 ,
Copied: stable/7/lib/libc/sys/closefrom.2 (from r194262, head/lib/libc/sys/closefrom.2)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ stable/7/lib/libc/sys/closefrom.2 Tue Jul 14 19:48:31 2009 (r195694, copy of r194262, head/lib/libc/sys/closefrom.2)
@@ -0,0 +1,53 @@
+.\" Copyright (c) 2009 Advanced Computing Technologies LLC
+.\" Written by: John H. Baldwin <jhb at FreeBSD.org>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd June 12, 2009
+.Dt CLOSEFROM 2
+.Os
+.Sh NAME
+.Nm closefrom
+.Nd delete open file descriptors
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.In unistd.h
+.Ft void
+.Fn closefrom "int lowfd"
+.Sh DESCRIPTION
+The
+.Fn closefrom
+system call deletes all open file descriptors greater than or equal to
+.Fa lowfd
+from the per-process object reference table.
+Any errors encountered while closing file descriptors are ignored.
+.Sh SEE ALSO
+.Xr close 2
+.Sh HISTORY
+The
+.Fn closefrom
+function first appeared in
+.Fx 8.0 .
Modified: stable/7/sys/compat/freebsd32/syscalls.master
==============================================================================
--- stable/7/sys/compat/freebsd32/syscalls.master Tue Jul 14 19:45:36 2009 (r195693)
+++ stable/7/sys/compat/freebsd32/syscalls.master Tue Jul 14 19:48:31 2009 (r195694)
@@ -854,3 +854,24 @@
uint32_t idlo, uint32_t idhi, \
size_t cpusetsize, \
const cpuset_t *mask); }
+489 AUE_NULL UNIMPL faccessat
+490 AUE_NULL UNIMPL fchmodat
+491 AUE_NULL UNIMPL fchownat
+492 AUE_NULL UNIMPL freebsd32_fexecve
+493 AUE_NULL UNIMPL freebsd32_fstatat
+494 AUE_NULL UNIMPL freebsd32_futimesat
+495 AUE_NULL UNIMPL linkat
+496 AUE_NULL UNIMPL mkdirat
+497 AUE_NULL UNIMPL mkfifoat
+498 AUE_NULL UNIMPL mknodat
+499 AUE_NULL UNIMPL openat
+500 AUE_NULL UNIMPL readlinkat
+501 AUE_NULL UNIMPL renameat
+502 AUE_NULL UNIMPL symlinkat
+503 AUE_NULL UNIMPL unlinkat
+504 AUE_NULL UNIMPL posix_openpt
+505 AUE_NULL UNIMPL gssd_syscall
+506 AUE_NULL UNIMPL freebsd32_jail_get
+507 AUE_NULL UNIMPL freebsd32_jail_set
+508 AUE_NULL UNIMPL jail_remove
+509 AUE_CLOSEFROM NOPROTO { int closefrom(int lowfd); }
Modified: stable/7/sys/kern/kern_descrip.c
==============================================================================
--- stable/7/sys/kern/kern_descrip.c Tue Jul 14 19:45:36 2009 (r195693)
+++ stable/7/sys/kern/kern_descrip.c Tue Jul 14 19:48:31 2009 (r195694)
@@ -1136,6 +1136,42 @@ kern_close(td, fd)
return (error);
}
+/*
+ * Close open file descriptors.
+ */
+#ifndef _SYS_SYSPROTO_H_
+struct closefrom_args {
+ int lowfd;
+};
+#endif
+/* ARGSUSED */
+int
+closefrom(struct thread *td, struct closefrom_args *uap)
+{
+ struct filedesc *fdp;
+ int fd;
+
+ fdp = td->td_proc->p_fd;
+ AUDIT_ARG(fd, uap->lowfd);
+
+ /*
+ * Treat negative starting file descriptor values identical to
+ * closefrom(0) which closes all files.
+ */
+ if (uap->lowfd < 0)
+ uap->lowfd = 0;
+ FILEDESC_SLOCK(fdp);
+ for (fd = uap->lowfd; fd < fdp->fd_nfiles; fd++) {
+ if (fdp->fd_ofiles[fd] != NULL) {
+ FILEDESC_SUNLOCK(fdp);
+ (void)kern_close(td, fd);
+ FILEDESC_SLOCK(fdp);
+ }
+ }
+ FILEDESC_SUNLOCK(fdp);
+ return (0);
+}
+
#if defined(COMPAT_43)
/*
* Return status information about a file descriptor.
Modified: stable/7/sys/kern/syscalls.master
==============================================================================
--- stable/7/sys/kern/syscalls.master Tue Jul 14 19:45:36 2009 (r195693)
+++ stable/7/sys/kern/syscalls.master Tue Jul 14 19:48:31 2009 (r195694)
@@ -870,6 +870,26 @@
488 AUE_NULL STD { int cpuset_setaffinity(cpulevel_t level, \
cpuwhich_t which, id_t id, size_t cpusetsize, \
const cpuset_t *mask); }
-
+489 AUE_NULL UNIMPL faccessat
+490 AUE_NULL UNIMPL fchmodat
+491 AUE_NULL UNIMPL fchownat
+492 AUE_NULL UNIMPL fexecve
+493 AUE_NULL UNIMPL fstatat
+494 AUE_NULL UNIMPL futimesat
+495 AUE_NULL UNIMPL linkat
+496 AUE_NULL UNIMPL mkdirat
+497 AUE_NULL UNIMPL mkfifoat
+498 AUE_NULL UNIMPL mknodat
+499 AUE_NULL UNIMPL openat
+500 AUE_NULL UNIMPL readlinkat
+501 AUE_NULL UNIMPL renameat
+502 AUE_NULL UNIMPL symlinkat
+503 AUE_NULL UNIMPL unlinkat
+504 AUE_NULL UNIMPL posix_openpt
+505 AUE_NULL UNIMPL gssd_syscall
+506 AUE_NULL UNIMPL jail_get
+507 AUE_NULL UNIMPL jail_set
+508 AUE_NULL UNIMPL jail_remove
+509 AUE_CLOSEFROM STD { int closefrom(int lowfd); }
; Please copy any additions and changes to the following compatability tables:
; sys/compat/freebsd32/syscalls.master
Modified: stable/7/sys/sys/param.h
==============================================================================
--- stable/7/sys/sys/param.h Tue Jul 14 19:45:36 2009 (r195693)
+++ stable/7/sys/sys/param.h Tue Jul 14 19:48:31 2009 (r195694)
@@ -57,7 +57,7 @@
* is created, otherwise 1.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 702103 /* Master, propagated to newvers */
+#define __FreeBSD_version 702104 /* Master, propagated to newvers */
#ifndef LOCORE
#include <sys/types.h>
More information about the svn-src-stable-7
mailing list