# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-06-01 06:02+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: TH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "memfd_create" msgstr "" #. type: TH #: archlinux debian-unstable opensuse-tumbleweed #, no-wrap msgid "2024-05-02" msgstr "" #. type: TH #: archlinux debian-unstable #, no-wrap msgid "Linux man-pages 6.8" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NAME" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "memfd_create - create an anonymous file" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "LIBRARY" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Standard C library (I, I<-lc>)" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SYNOPSIS" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "B<#define _GNU_SOURCE> /* See feature_test_macros(7) */\n" "B<#include Esys/mman.hE>\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "BIB<, unsigned int >IB<);>\n" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "DESCRIPTION" msgstr "" #. David Herrmann: #. memfd uses VM_NORESERVE so each page is accounted on first access. #. This means, the overcommit-limits (see __vm_enough_memory()) and the #. memory-cgroup limits (mem_cgroup_try_charge()) are applied. Note that #. those are accounted on "current" and "current->mm", that is, the #. process doing the first page access. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B() creates an anonymous file and returns a file descriptor " "that refers to it. The file behaves like a regular file, and so can be " "modified, truncated, memory-mapped, and so on. However, unlike a regular " "file, it lives in RAM and has a volatile backing storage. Once all " "references to the file are dropped, it is automatically released. Anonymous " "memory is used for all backing pages of the file. Therefore, files created " "by B() have the same semantics as other anonymous memory " "allocations such as those allocated using B(2) with the " "B flag." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The initial size of the file is set to 0. Following the call, the file size " "should be set using B(2). (Alternatively, the file may be " "populated by calls to B(2) or similar.)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The name supplied in I is used as a filename and will be displayed as " "the target of the corresponding symbolic link in the directory I. The displayed name is always prefixed with I and serves only " "for debugging purposes. Names do not affect the behavior of the file " "descriptor, and as such multiple files can have the same name without any " "side effects." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The following values may be bitwise ORed in I to change the behavior " "of B():" msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Set the close-on-exec (B) flag on the new file descriptor. See " "the description of the B flag in B(2) for reasons why this " "may be useful." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. FIXME Why is the MFD_ALLOW_SEALING behavior not simply the default? #. Is it worth adding some text explaining this? #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Allow sealing operations on this file. See the discussion of the " "B and B operations in B(2), and also NOTES, " "below. The initial set of seals is empty. If this flag is not set, the " "initial set of seals will be B, meaning that no other seals can " "be set on the file." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B (since Linux 4.14)" msgstr "" #. commit 749df87bd7bee5a79cef073f5d032ddb2b211de8 #. commit 47b9012ecdc747f6936395265e677d41e11a31ff #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The anonymous file will be created in the hugetlbfs filesystem using huge " "pages. See the Linux kernel source file I for more information about hugetlbfs. Specifying both " "B and B in I is supported since Linux " "4.16." msgstr "" #. type: TP #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: TQ #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: TQ #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "\\&.\\|.\\|." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Used in conjunction with B to select alternative hugetlb page " "sizes (respectively, 2\\ MB, 1\\ GB, ...) on systems that support multiple " "hugetlb page sizes. Definitions for known huge page sizes are included in " "the header file Ilinux/memfd.hE.>" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For details on encoding huge page sizes not included in the header file, see " "the discussion of the similarly named constants in B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Unused bits in I must be 0." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "As its return value, B() returns a new file descriptor that " "can be used to refer to the file. This file descriptor is opened for both " "reading and writing (B) and B is set for the file " "descriptor." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "With respect to B(2) and B(2), the usual semantics apply for " "the file descriptor created by B(). A copy of the file " "descriptor is inherited by the child produced by B(2) and refers to " "the same file. The file descriptor is preserved across B(2), unless " "the close-on-exec flag has been set." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "RETURN VALUE" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "On success, B() returns a new file descriptor. On error, -1 " "is returned and I is set to indicate the error." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "ERRORS" msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The address in I points to invalid memory." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I included unknown bits." msgstr "" #. NAME_MAX - strlen("memfd:") #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I was too long. (The limit is 249 bytes, excluding the terminating " "null byte.)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Both B and B were specified in I." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The per-process limit on the number of open file descriptors has been " "reached." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The system-wide limit on the total number of open files has been reached." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "There was insufficient memory to create a new anonymous file." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B flag was specified, but the caller was not privileged " "(did not have the B capability) and is not a member of the " "I group; see the description of I in B(5)." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "STANDARDS" msgstr "" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "Linux." msgstr "" #. type: SH #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "HISTORY" msgstr "" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "Linux 3.17, glibc 2.27." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NOTES" msgstr "" #. See also http://lwn.net/Articles/593918/ #. and http://lwn.net/Articles/594919/ and http://lwn.net/Articles/591108/ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B() system call provides a simple alternative to manually " "mounting a B(5) filesystem and creating and opening a file in that " "filesystem. The primary purpose of B() is to create files " "and associated file descriptors that are used with the file-sealing APIs " "provided by B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B() system call also has uses without file sealing (which " "is why file-sealing is disabled, unless explicitly requested with the " "B flag). In particular, it can be used as an alternative " "to creating files in I or as an alternative to using the B(2) " "B in cases where there is no intention to actually link the " "resulting file into the filesystem." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "File sealing" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In the absence of file sealing, processes that communicate via shared memory " "must either trust each other, or take measures to deal with the possibility " "that an untrusted peer may manipulate the shared memory region in " "problematic ways. For example, an untrusted peer might modify the contents " "of the shared memory at any time, or shrink the shared memory region. The " "former possibility leaves the local process vulnerable to time-of-check-to-" "time-of-use race conditions (typically dealt with by copying data from the " "shared memory region before checking and using it). The latter possibility " "leaves the local process vulnerable to B signals when an attempt is " "made to access a now-nonexistent location in the shared memory region. " "(Dealing with this possibility necessitates the use of a handler for the " "B signal.)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Dealing with untrusted peers imposes extra complexity on code that employs " "shared memory. Memory sealing enables that extra complexity to be " "eliminated, by allowing a process to operate secure in the knowledge that " "its peer can't modify the shared memory in an undesired fashion." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "An example of the usage of the sealing mechanism is as follows:" msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(1)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The first process creates a B(5) file using B(). The " "call yields a file descriptor used in subsequent steps." msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The first process sizes the file created in the previous step using " "B(2), maps it using B(2), and populates the shared memory " "with the desired data." msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(3)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The first process uses the B(2) B operation to place " "one or more seals on the file, in order to restrict further modifications on " "the file. (If placing the seal B, then it will be necessary " "to first unmap the shared writable mapping created in the previous step. " "Otherwise, behavior similar to B can be achieved by using " "B, which will prevent future writes via B(2) and " "B(2) from succeeding while keeping existing shared writable " "mappings)." msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(4)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A second process obtains a file descriptor for the B(5) file and " "maps it. Among the possible ways in which this could happen are the " "following:" msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "\\[bu]" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The process that called B() could transfer the resulting file " "descriptor to the second process via a UNIX domain socket (see B(7) " "and B(3)). The second process then maps the file using B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The second process is created via B(2) and thus automatically " "inherits the file descriptor and mapping. (Note that in this case and the " "next, there is a natural trust relationship between the two processes, since " "they are running under the same user ID. Therefore, file sealing would not " "normally be necessary.)" msgstr "" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The second process opens the file IpidIfd, where " "IpidE> is the PID of the first process (the one that called " "B()), and IfdE> is the number of the file descriptor " "returned by the call to B() in that process. The second " "process then maps the file using B(2)." msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(5)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The second process uses the B(2) B operation to " "retrieve the bit mask of seals that has been applied to the file. This bit " "mask can be inspected in order to determine what kinds of restrictions have " "been placed on file modifications. If desired, the second process can apply " "further seals to impose additional restrictions (so long as the " "B seal has not yet been applied)." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "EXAMPLES" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Below are shown two example programs that demonstrate the use of " "B() and the file sealing API." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The first program, I, creates a B(5) file using " "B(), sets a size for the file, maps it into memory, and " "optionally places some seals on the file. The program accepts up to three " "command-line arguments, of which the first two are required. The first " "argument is the name to associate with the file, the second argument is the " "size to be set for the file, and the optional third argument is a string of " "characters that specify seals to be set on the file." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The second program, I, can be used to open an existing file " "that was created via B() and inspect the set of seals that " "have been applied to that file." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The following shell session demonstrates the use of these programs. First " "we create a B(5) file and set some seals on it:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "$ B<./t_memfd_create my_memfd_file 4096 sw &>\n" "[1] 11775\n" "PID: 11775; fd: 3; /proc/11775/fd/3\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "At this point, the I program continues to run in the " "background. From another program, we can obtain a file descriptor for the " "file created by B() by opening the IpidI file " "that corresponds to the file descriptor opened by B(). Using " "that pathname, we inspect the content of the IpidI symbolic " "link, and use our I program to view the seals that have been " "placed on the file:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "$ B\n" "/memfd:my_memfd_file (deleted)\n" "$ B<./t_get_seals /proc/11775/fd/3>\n" "Existing seals: WRITE SHRINK\n" msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Program source: t_memfd_create.c" msgstr "" #. type: Plain text #: archlinux debian-unstable opensuse-tumbleweed #, no-wrap msgid "" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Efcntl.hE\n" "#include Estdint.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "#include Estring.hE\n" "#include Esys/mman.hE\n" "#include Esys/types.hE\n" "#include Eunistd.hE\n" "\\&\n" "int\n" "main(int argc, char *argv[])\n" "{\n" " int fd;\n" " char *name, *seals_arg;\n" " ssize_t len;\n" " unsigned int seals;\n" "\\&\n" " if (argc E 3) {\n" " fprintf(stderr, \"%s name size [seals]\\en\", argv[0]);\n" " fprintf(stderr, \"\\et\\[aq]seals\\[aq] can contain any of the \"\n" " \"following characters:\\en\");\n" " fprintf(stderr, \"\\et\\etg - F_SEAL_GROW\\en\");\n" " fprintf(stderr, \"\\et\\ets - F_SEAL_SHRINK\\en\");\n" " fprintf(stderr, \"\\et\\etw - F_SEAL_WRITE\\en\");\n" " fprintf(stderr, \"\\et\\etW - F_SEAL_FUTURE_WRITE\\en\");\n" " fprintf(stderr, \"\\et\\etS - F_SEAL_SEAL\\en\");\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " name = argv[1];\n" " len = atoi(argv[2]);\n" " seals_arg = argv[3];\n" "\\&\n" " /* Create an anonymous file in tmpfs; allow seals to be\n" " placed on the file. */\n" "\\&\n" " fd = memfd_create(name, MFD_ALLOW_SEALING);\n" " if (fd == -1)\n" " err(EXIT_FAILURE, \"memfd_create\");\n" "\\&\n" " /* Size the file as specified on the command line. */\n" "\\&\n" " if (ftruncate(fd, len) == -1)\n" " err(EXIT_FAILURE, \"truncate\");\n" "\\&\n" " printf(\"PID: %jd; fd: %d; /proc/%jd/fd/%d\\en\",\n" " (intmax_t) getpid(), fd, (intmax_t) getpid(), fd);\n" "\\&\n" " /* Code to map the file and populate the mapping with data\n" " omitted. */\n" "\\&\n" " /* If a \\[aq]seals\\[aq] command-line argument was supplied, set some\n" " seals on the file. */\n" "\\&\n" " if (seals_arg != NULL) {\n" " seals = 0;\n" "\\&\n" " if (strchr(seals_arg, \\[aq]g\\[aq]) != NULL)\n" " seals |= F_SEAL_GROW;\n" " if (strchr(seals_arg, \\[aq]s\\[aq]) != NULL)\n" " seals |= F_SEAL_SHRINK;\n" " if (strchr(seals_arg, \\[aq]w\\[aq]) != NULL)\n" " seals |= F_SEAL_WRITE;\n" " if (strchr(seals_arg, \\[aq]W\\[aq]) != NULL)\n" " seals |= F_SEAL_FUTURE_WRITE;\n" " if (strchr(seals_arg, \\[aq]S\\[aq]) != NULL)\n" " seals |= F_SEAL_SEAL;\n" "\\&\n" " if (fcntl(fd, F_ADD_SEALS, seals) == -1)\n" " err(EXIT_FAILURE, \"fcntl\");\n" " }\n" "\\&\n" " /* Keep running, so that the file created by memfd_create()\n" " continues to exist. */\n" "\\&\n" " pause();\n" "\\&\n" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" #. SRC END #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Program source: t_get_seals.c" msgstr "" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Efcntl.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "\\&\n" "int\n" "main(int argc, char *argv[])\n" "{\n" " int fd;\n" " unsigned int seals;\n" "\\&\n" " if (argc != 2) {\n" " fprintf(stderr, \"%s /proc/PID/fd/FD\\en\", argv[0]);\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " fd = open(argv[1], O_RDWR);\n" " if (fd == -1)\n" " err(EXIT_FAILURE, \"open\");\n" "\\&\n" " seals = fcntl(fd, F_GET_SEALS);\n" " if (seals == -1)\n" " err(EXIT_FAILURE, \"fcntl\");\n" "\\&\n" " printf(\"Existing seals:\");\n" " if (seals & F_SEAL_SEAL)\n" " printf(\" SEAL\");\n" " if (seals & F_SEAL_GROW)\n" " printf(\" GROW\");\n" " if (seals & F_SEAL_WRITE)\n" " printf(\" WRITE\");\n" " if (seals & F_SEAL_FUTURE_WRITE)\n" " printf(\" FUTURE_WRITE\");\n" " if (seals & F_SEAL_SHRINK)\n" " printf(\" SHRINK\");\n" " printf(\"\\en\");\n" "\\&\n" " /* Code to map the file and access the contents of the\n" " resulting mapping omitted. */\n" "\\&\n" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" #. SRC END #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B(2), B(2), B(2), B(2), B(2), " "B(3)" msgstr "" #. type: TH #: debian-bookworm #, no-wrap msgid "2023-02-05" msgstr "" #. type: TH #: debian-bookworm #, no-wrap msgid "Linux man-pages 6.03" msgstr "" #. type: TP #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "B, B, B<...>" msgstr "" #. type: SH #: debian-bookworm #, no-wrap msgid "VERSIONS" msgstr "" #. type: Plain text #: debian-bookworm msgid "" "The B() system call first appeared in Linux 3.17; glibc " "support was added in glibc 2.27." msgstr "" #. type: Plain text #: debian-bookworm msgid "The B() system call is Linux-specific." msgstr "" #. type: Plain text #: debian-bookworm msgid "" "The second process opens the file IpidE/fd/EfdE>, " "where IpidE> is the PID of the first process (the one that called " "B()), and IfdE> is the number of the file descriptor " "returned by the call to B() in that process. The second " "process then maps the file using B(2)." msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Efcntl.hE\n" "#include Estdint.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "#include Estring.hE\n" "#include Esys/mman.hE\n" "#include Eunistd.hE\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "int\n" "main(int argc, char *argv[])\n" "{\n" " int fd;\n" " char *name, *seals_arg;\n" " ssize_t len;\n" " unsigned int seals;\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (argc E 3) {\n" " fprintf(stderr, \"%s name size [seals]\\en\", argv[0]);\n" " fprintf(stderr, \"\\et\\[aq]seals\\[aq] can contain any of the \"\n" " \"following characters:\\en\");\n" " fprintf(stderr, \"\\et\\etg - F_SEAL_GROW\\en\");\n" " fprintf(stderr, \"\\et\\ets - F_SEAL_SHRINK\\en\");\n" " fprintf(stderr, \"\\et\\etw - F_SEAL_WRITE\\en\");\n" " fprintf(stderr, \"\\et\\etW - F_SEAL_FUTURE_WRITE\\en\");\n" " fprintf(stderr, \"\\et\\etS - F_SEAL_SEAL\\en\");\n" " exit(EXIT_FAILURE);\n" " }\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " name = argv[1];\n" " len = atoi(argv[2]);\n" " seals_arg = argv[3];\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* Create an anonymous file in tmpfs; allow seals to be\n" " placed on the file. */\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " fd = memfd_create(name, MFD_ALLOW_SEALING);\n" " if (fd == -1)\n" " err(EXIT_FAILURE, \"memfd_create\");\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Size the file as specified on the command line. */\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (ftruncate(fd, len) == -1)\n" " err(EXIT_FAILURE, \"truncate\");\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " printf(\"PID: %jd; fd: %d; /proc/%jd/fd/%d\\en\",\n" " (intmax_t) getpid(), fd, (intmax_t) getpid(), fd);\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* Code to map the file and populate the mapping with data\n" " omitted. */\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* If a \\[aq]seals\\[aq] command-line argument was supplied, set some\n" " seals on the file. */\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (seals_arg != NULL) {\n" " seals = 0;\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (strchr(seals_arg, \\[aq]g\\[aq]) != NULL)\n" " seals |= F_SEAL_GROW;\n" " if (strchr(seals_arg, \\[aq]s\\[aq]) != NULL)\n" " seals |= F_SEAL_SHRINK;\n" " if (strchr(seals_arg, \\[aq]w\\[aq]) != NULL)\n" " seals |= F_SEAL_WRITE;\n" " if (strchr(seals_arg, \\[aq]W\\[aq]) != NULL)\n" " seals |= F_SEAL_FUTURE_WRITE;\n" " if (strchr(seals_arg, \\[aq]S\\[aq]) != NULL)\n" " seals |= F_SEAL_SEAL;\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (fcntl(fd, F_ADD_SEALS, seals) == -1)\n" " err(EXIT_FAILURE, \"fcntl\");\n" " }\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* Keep running, so that the file created by memfd_create()\n" " continues to exist. */\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " pause();\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Efcntl.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "int\n" "main(int argc, char *argv[])\n" "{\n" " int fd;\n" " unsigned int seals;\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (argc != 2) {\n" " fprintf(stderr, \"%s /proc/PID/fd/FD\\en\", argv[0]);\n" " exit(EXIT_FAILURE);\n" " }\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " fd = open(argv[1], O_RDWR);\n" " if (fd == -1)\n" " err(EXIT_FAILURE, \"open\");\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " seals = fcntl(fd, F_GET_SEALS);\n" " if (seals == -1)\n" " err(EXIT_FAILURE, \"fcntl\");\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " printf(\"Existing seals:\");\n" " if (seals & F_SEAL_SEAL)\n" " printf(\" SEAL\");\n" " if (seals & F_SEAL_GROW)\n" " printf(\" GROW\");\n" " if (seals & F_SEAL_WRITE)\n" " printf(\" WRITE\");\n" " if (seals & F_SEAL_FUTURE_WRITE)\n" " printf(\" FUTURE_WRITE\");\n" " if (seals & F_SEAL_SHRINK)\n" " printf(\" SHRINK\");\n" " printf(\"\\en\");\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* Code to map the file and access the contents of the\n" " resulting mapping omitted. */\n" msgstr "" #. type: TH #: fedora-40 fedora-rawhide mageia-cauldron #, no-wrap msgid "2023-10-31" msgstr "" #. type: TH #: fedora-40 mageia-cauldron #, no-wrap msgid "Linux man-pages 6.06" msgstr "" #. type: Plain text #: fedora-40 fedora-rawhide mageia-cauldron #, no-wrap msgid "" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Efcntl.hE\n" "#include Estdint.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "#include Estring.hE\n" "#include Esys/mman.hE\n" "#include Eunistd.hE\n" "\\&\n" "int\n" "main(int argc, char *argv[])\n" "{\n" " int fd;\n" " char *name, *seals_arg;\n" " ssize_t len;\n" " unsigned int seals;\n" "\\&\n" " if (argc E 3) {\n" " fprintf(stderr, \"%s name size [seals]\\en\", argv[0]);\n" " fprintf(stderr, \"\\et\\[aq]seals\\[aq] can contain any of the \"\n" " \"following characters:\\en\");\n" " fprintf(stderr, \"\\et\\etg - F_SEAL_GROW\\en\");\n" " fprintf(stderr, \"\\et\\ets - F_SEAL_SHRINK\\en\");\n" " fprintf(stderr, \"\\et\\etw - F_SEAL_WRITE\\en\");\n" " fprintf(stderr, \"\\et\\etW - F_SEAL_FUTURE_WRITE\\en\");\n" " fprintf(stderr, \"\\et\\etS - F_SEAL_SEAL\\en\");\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " name = argv[1];\n" " len = atoi(argv[2]);\n" " seals_arg = argv[3];\n" "\\&\n" " /* Create an anonymous file in tmpfs; allow seals to be\n" " placed on the file. */\n" "\\&\n" " fd = memfd_create(name, MFD_ALLOW_SEALING);\n" " if (fd == -1)\n" " err(EXIT_FAILURE, \"memfd_create\");\n" "\\&\n" " /* Size the file as specified on the command line. */\n" "\\&\n" " if (ftruncate(fd, len) == -1)\n" " err(EXIT_FAILURE, \"truncate\");\n" "\\&\n" " printf(\"PID: %jd; fd: %d; /proc/%jd/fd/%d\\en\",\n" " (intmax_t) getpid(), fd, (intmax_t) getpid(), fd);\n" "\\&\n" " /* Code to map the file and populate the mapping with data\n" " omitted. */\n" "\\&\n" " /* If a \\[aq]seals\\[aq] command-line argument was supplied, set some\n" " seals on the file. */\n" "\\&\n" " if (seals_arg != NULL) {\n" " seals = 0;\n" "\\&\n" " if (strchr(seals_arg, \\[aq]g\\[aq]) != NULL)\n" " seals |= F_SEAL_GROW;\n" " if (strchr(seals_arg, \\[aq]s\\[aq]) != NULL)\n" " seals |= F_SEAL_SHRINK;\n" " if (strchr(seals_arg, \\[aq]w\\[aq]) != NULL)\n" " seals |= F_SEAL_WRITE;\n" " if (strchr(seals_arg, \\[aq]W\\[aq]) != NULL)\n" " seals |= F_SEAL_FUTURE_WRITE;\n" " if (strchr(seals_arg, \\[aq]S\\[aq]) != NULL)\n" " seals |= F_SEAL_SEAL;\n" "\\&\n" " if (fcntl(fd, F_ADD_SEALS, seals) == -1)\n" " err(EXIT_FAILURE, \"fcntl\");\n" " }\n" "\\&\n" " /* Keep running, so that the file created by memfd_create()\n" " continues to exist. */\n" "\\&\n" " pause();\n" "\\&\n" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" #. type: TH #: fedora-rawhide #, no-wrap msgid "Linux man-pages 6.7" msgstr "" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "2023-04-03" msgstr "" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "Linux man-pages 6.04" msgstr "" #. type: TH #: opensuse-tumbleweed #, no-wrap msgid "Linux man-pages (unreleased)" msgstr ""