.\" $NetBSD: memfd_create.2,v 1.1 2023/07/10 02:31:54 christos Exp $ .\" .\" Copyright (c) 2023 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This code is derived from software contributed to The NetBSD Foundation .\" by Theodore Preduta. .\" .\" 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. .\" .Dd July 5, 2023 .Dt MEMFD_CREATE 2 .Os .Sh NAME .Nm memfd_create .Nd create anonymous files .Sh LIBRARY .Lb libc .Sh SYNOPSIS .In sys/mman.h .Ft int .Fn memfd_create "const char *name" "unsigned int flags" .Sh DESCRIPTION The .Fn memfd_create system call returns a file descriptor to a file named .Fa name backed only by RAM. Initially, the size of the file is zero. .Pp The length of .Fa name must not exceed .Dv NAME_MAX-6 characters in length, to allow for the prefix .Dq memfd: to be added. But since the file descriptor does not live on disk, .Fa name does not have to be unique. .Fa name is only intended to be used for debugging purposes and commands like .Xr fstat 1 . .Pp Additionally, any of the following may be specified as the .Fa flags : .Bl -tag -width MFD_ALLOW_SEALING .It Dv MFD_CLOEXEC Set the .Xr close 2 on .Xr exec 3 flag. .It Dv MFD_ALLOW_SEALING Allow adding seals to the file descriptor using the .Xr fcntl 2 .Dv F_ADD_SEALS command. .El .Pp Otherwise, the returned file descriptor behaves the same as a regular file, including the ability to be mapped by .Xr mmap 2 . .Sh RETURN VALUES If successful, the .Fn memfd_create system call returns a non-negative integer. On failure -1 is returned and .Fa errno is set to indicate the error. .Sh ERRORS .Fn memfd_create will fail if: .Bl -tag -width Er .It Bq Er EFAULT The argument .Fa name is .Dv NULL or points to invalid memory. .It Bq Er EINVAL The argument .Fa flags has any bits set other than .Dv MFD_CLOEXEC or .Dv MFD_ALLOW_SEALING . .It Bq Er ENAMETOOLONG The length of .Fa name appended with the prefix .Dq memfd: would exceed .Dv NAME_MAX . .It Bq Er ENFILE The system file table is full. .El .Sh SEE ALSO .Xr fcntl 2 , .Xr mmap 2 , .Xr shmget 2 , .Xr shm_open 3 .Sh HISTORY .Fn memfd_create is compatible with the Linux system call of the same name that first appeared in Linux 3.17.