€•QŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ%/translations/zh_CN/security/landlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/zh_TW/security/landlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/it_IT/security/landlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ja_JP/security/landlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ko_KR/security/landlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/pt_BR/security/landlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/sp_SP/security/landlock”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ?/var/lib/git/docbuild/linux/Documentation/security/landlock.rst”h´Kubh¶)�”}”(hŒ9Copyright © 2017-2020 Mickaël Salaün ”h]”hŒ9Copyright © 2017-2020 Mickaël Salaün ”…”�”}”hhÈsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³hÇh´Kubh¶)�”}”(hŒCopyright © 2019-2020 ANSSI”h]”hŒCopyright © 2019-2020 ANSSI”…”�”}”hhÖsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³hÇh´Kubh¶)�”}”(hŒ"Copyright © 2026 Cloudflare, Inc.”h]”hŒ"Copyright © 2026 Cloudflare, Inc.”…”�”}”hhäsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³hÇh´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ"Landlock LSM: kernel documentation”h]”hŒ"Landlock LSM: kernel documentation”…”�”}”(hhùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hhôh²hh³hÇh´KubhŒ field_list”“”)�”}”(hhh]”(hŒfield”“”)�”}”(hhh]”(hŒ field_name”“”)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh³hÇh´KubhŒ field_body”“”)�”}”(hŒMickaël Salaün”h]”hŒ paragraph”“”)�”}”(hj%h]”hŒMickaël Salaün”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j!hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K hj h²hubj )�”}”(hhh]”(j)�”}”(hŒDate”h]”hŒDate”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBh³hÇh´Kubj")�”}”(hŒ August 2026 ”h]”j()�”}”(hŒ August 2026”h]”hŒ August 2026”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j!hjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K hj h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhôh²hh³hÇh´K ubj()�”}”(hXšLandlock's goal is to create scoped access-control (i.e. sandboxing). To harden a whole system, this feature should be available to any process, including unprivileged ones. Because such a process may be compromised or backdoored (i.e. untrusted), Landlock's features must be safe to use from the kernel and other processes point of view. Landlock's interface must therefore expose a minimal attack surface.”h]”hX Landlock’s goal is to create scoped access-control (i.e. sandboxing). To harden a whole system, this feature should be available to any process, including unprivileged ones. Because such a process may be compromised or backdoored (i.e. untrusted), Landlock’s features must be safe to use from the kernel and other processes point of view. Landlock’s interface must therefore expose a minimal attack surface.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K hhôh²hubj()�”}”(hXLandlock is designed to be usable by unprivileged processes while following the system security policy enforced by other access control mechanisms (e.g. DAC, LSM). A Landlock rule shall not interfere with other access-controls enforced on the system, only add more restrictions.”h]”hXLandlock is designed to be usable by unprivileged processes while following the system security policy enforced by other access control mechanisms (e.g. DAC, LSM). A Landlock rule shall not interfere with other access-controls enforced on the system, only add more restrictions.”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Khhôh²hubj()�”}”(hŒ³Any user can enforce Landlock rulesets on their processes. They are merged and evaluated against inherited rulesets in a way that ensures that only more constraints can be added.”h]”hŒ³Any user can enforce Landlock rulesets on their processes. They are merged and evaluated against inherited rulesets in a way that ensures that only more constraints can be added.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Khhôh²hubj()�”}”(hŒUUser space documentation can be found here: Documentation/userspace-api/landlock.rst.”h]”hŒUUser space documentation can be found here: Documentation/userspace-api/landlock.rst.”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Khhôh²hubhó)�”}”(hhh]”(hø)�”}”(hŒ+Guiding principles for safe access controls”h]”hŒ+Guiding principles for safe access controls”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hj¯h²hh³hÇh´K!ubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ A Landlock rule shall be focused on access control on kernel objects instead of syscall filtering (i.e. syscall arguments), which is the purpose of seccomp-bpf.”h]”j()�”}”(hŒ A Landlock rule shall be focused on access control on kernel objects instead of syscall filtering (i.e. syscall arguments), which is the purpose of seccomp-bpf.”h]”hŒ A Landlock rule shall be focused on access control on kernel objects instead of syscall filtering (i.e. syscall arguments), which is the purpose of seccomp-bpf.”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K#hjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhjÂh²hh³hÇh´NubjÆ)�”}”(hŒ¶To avoid multiple kinds of side-channel attacks (e.g. leak of security policies, CPU-based attacks), Landlock rules shall not be able to programmatically communicate with user space.”h]”j()�”}”(hŒ¶To avoid multiple kinds of side-channel attacks (e.g. leak of security policies, CPU-based attacks), Landlock rules shall not be able to programmatically communicate with user space.”h]”hŒ¶To avoid multiple kinds of side-channel attacks (e.g. leak of security policies, CPU-based attacks), Landlock rules shall not be able to programmatically communicate with user space.”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K&hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhjÂh²hh³hÇh´NubjÆ)�”}”(hŒRKernel access check shall not slow down access request from unsandboxed processes.”h]”j()�”}”(hŒRKernel access check shall not slow down access request from unsandboxed processes.”h]”hŒRKernel access check shall not slow down access request from unsandboxed processes.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K)hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhjÂh²hh³hÇh´NubjÆ)�”}”(hŒvComputation related to Landlock operations (e.g. enforcing a ruleset) shall only impact the processes requesting them.”h]”j()�”}”(hŒvComputation related to Landlock operations (e.g. enforcing a ruleset) shall only impact the processes requesting them.”h]”hŒvComputation related to Landlock operations (e.g. enforcing a ruleset) shall only impact the processes requesting them.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K+hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhjÂh²hh³hÇh´NubjÆ)�”}”(hŒåResources (e.g. file descriptors) directly obtained from the kernel by a sandboxed process shall retain their scoped accesses (at the time of resource acquisition) whatever process uses them. Cf. `File descriptor access rights`_.”h]”j()�”}”(hŒåResources (e.g. file descriptors) directly obtained from the kernel by a sandboxed process shall retain their scoped accesses (at the time of resource acquisition) whatever process uses them. Cf. `File descriptor access rights`_.”h]”(hŒÄResources (e.g. file descriptors) directly obtained from the kernel by a sandboxed process shall retain their scoped accesses (at the time of resource acquisition) whatever process uses them. Cf. ”…”�”}”(hj+h²hh³Nh´NubhŒ reference”“”)�”}”(hŒ `File descriptor access rights`_”h]”hŒFile descriptor access rights”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒFile descriptor access rights”Œrefid”Œfile-descriptor-access-rights”uh1j3hj+Œresolved”KubhŒ.”…”�”}”(hj+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K-hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhjÂh²hh³hÇh´NubjÆ)�”}”(hX*Access denials shall be logged according to system and Landlock domain configurations. Log entries must contain information about the cause of the denial and the owner of the related security policy. Such log generation should have a negligible performance and memory impact on allowed requests. ”h]”j()�”}”(hX)Access denials shall be logged according to system and Landlock domain configurations. Log entries must contain information about the cause of the denial and the owner of the related security policy. Such log generation should have a negligible performance and memory impact on allowed requests.”h]”hX)Access denials shall be logged according to system and Landlock domain configurations. Log entries must contain information about the cause of the denial and the owner of the related security policy. Such log generation should have a negligible performance and memory impact on allowed requests.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K1hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhjÂh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jÀh³hÇh´K#hj¯h²hubeh}”(h]”Œ+guiding-principles-for-safe-access-controls”ah ]”h"]”Œ+guiding principles for safe access controls”ah$]”h&]”uh1hòhhôh²hh³hÇh´K!ubhó)�”}”(hhh]”(hø)�”}”(hŒDesign choices”h]”hŒDesign choices”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hj€h²hh³hÇh´K7ubhó)�”}”(hhh]”(hø)�”}”(hŒInode access rights”h]”hŒInode access rights”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hj‘h²hh³hÇh´K:ubj()�”}”(hX/All access rights are tied to an inode and what can be accessed through it. Reading the content of a directory does not imply to be allowed to read the content of a listed inode. Indeed, a file name is local to its parent directory, and an inode can be referenced by multiple file names thanks to (hard) links. Being able to unlink a file only has a direct impact on the directory, not the unlinked inode. This is the reason why ``LANDLOCK_ACCESS_FS_REMOVE_FILE`` or ``LANDLOCK_ACCESS_FS_REFER`` are not allowed to be tied to files but only to directories.”h]”(hX°All access rights are tied to an inode and what can be accessed through it. Reading the content of a directory does not imply to be allowed to read the content of a listed inode. Indeed, a file name is local to its parent directory, and an inode can be referenced by multiple file names thanks to (hard) links. Being able to unlink a file only has a direct impact on the directory, not the unlinked inode. This is the reason why ”…”�”}”(hj¢h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ"``LANDLOCK_ACCESS_FS_REMOVE_FILE``”h]”hŒLANDLOCK_ACCESS_FS_REMOVE_FILE”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj¢ubhŒ or ”…”�”}”(hj¢h²hh³Nh´Nubj«)�”}”(hŒ``LANDLOCK_ACCESS_FS_REFER``”h]”hŒLANDLOCK_ACCESS_FS_REFER”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj¢ubhŒ= are not allowed to be tied to files but only to directories.”…”�”}”(hj¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´KRhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj4h²hh³hÇh´NubjÆ)�”}”(hŒ=``int fd = open(path, O_WRONLY); ftruncate(fd); close(fd);`` ”h]”j()�”}”(hŒ<``int fd = open(path, O_WRONLY); ftruncate(fd); close(fd);``”h]”j«)�”}”(hj]h]”hŒ8int fd = open(path, O_WRONLY); ftruncate(fd); close(fd);”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´KShjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj4h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jvjwuh1jÀh³hÇh´KRhjÞh²hubj()�”}”(hXÞSimilarly to file access modes (e.g. ``O_RDWR``), Landlock access rights attached to file descriptors are retained even if they are passed between processes (e.g. through a Unix domain socket). Such access rights will then be enforced even if the receiving process is not sandboxed by Landlock. Indeed, this is required to keep access controls consistent over the whole system, and this avoids unattended bypasses through file descriptor passing (i.e. confused deputy attack).”h]”(hŒ%Similarly to file access modes (e.g. ”…”�”}”(hj~h²hh³Nh´Nubj«)�”}”(hŒ ``O_RDWR``”h]”hŒO_RDWR”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj~ubhX¯), Landlock access rights attached to file descriptors are retained even if they are passed between processes (e.g. through a Unix domain socket). Such access rights will then be enforced even if the receiving process is not sandboxed by Landlock. Indeed, this is required to keep access controls consistent over the whole system, and this avoids unattended bypasses through file descriptor passing (i.e. confused deputy attack).”…”�”}”(hj~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´KUhjÞh²hubhŒtarget”“”)�”}”(hŒ.. _scoped-flags-interaction:”h]”h}”(h]”h ]”h"]”h$]”h&]”jEŒscoped-flags-interaction”uh1jžh´K]hjÞh²hh³hÇubeh}”(h]”jFah ]”h"]”Œfile descriptor access rights”ah$]”h&]”uh1hòhj€h²hh³hÇh´KFŒ referenced”Kubhó)�”}”(hhh]”(hø)�”}”(hŒ8Interaction between scoped flags and other access rights”h]”hŒ8Interaction between scoped flags and other access rights”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hj³h²hh³hÇh´K`ubj()�”}”(hŒÐThe ``scoped`` flags in &struct landlock_ruleset_attr restrict the use of *outgoing* IPC from the created Landlock domain, while they permit reaching out to IPC endpoints *within* the created Landlock domain.”h]”(hŒThe ”…”�”}”(hjÄh²hh³Nh´Nubj«)�”}”(hŒ ``scoped``”h]”hŒscoped”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÄubhŒ< flags in &struct landlock_ruleset_attr restrict the use of ”…”�”}”(hjÄh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ *outgoing*”h]”hŒoutgoing”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÄubhŒW IPC from the created Landlock domain, while they permit reaching out to IPC endpoints ”…”�”}”(hjÄh²hh³Nh´Nubjß)�”}”(hŒ*within*”h]”hŒwithin”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÄubhŒ the created Landlock domain.”…”�”}”(hjÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Kbhj³h²hubj()�”}”(hŒÏIn the future, scoped flags *may* interact with other access rights, e.g. so that abstract UNIX sockets can be allow-listed by name, or so that signals can be allow-listed by signal number or target process.”h]”(hŒIn the future, scoped flags ”…”�”}”(hj h²hh³Nh´Nubjß)�”}”(hŒ*may*”h]”hŒmay”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj ubhŒ® interact with other access rights, e.g. so that abstract UNIX sockets can be allow-listed by name, or so that signals can be allow-listed by signal number or target process.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Kghj³h²hubj()�”}”(hX1When introducing ``LANDLOCK_ACCESS_FS_RESOLVE_UNIX``, we defined it to implicitly have the same scoping semantics as a ``LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET`` flag would have: connecting to UNIX sockets within the same domain (where ``LANDLOCK_ACCESS_FS_RESOLVE_UNIX`` is used) is unconditionally allowed.”h]”(hŒWhen introducing ”…”�”}”(hj*h²hh³Nh´Nubj«)�”}”(hŒ#``LANDLOCK_ACCESS_FS_RESOLVE_UNIX``”h]”hŒLANDLOCK_ACCESS_FS_RESOLVE_UNIX”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj*ubhŒC, we defined it to implicitly have the same scoping semantics as a ”…”�”}”(hj*h²hh³Nh´Nubj«)�”}”(hŒ'``LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET``”h]”hŒ#LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj*ubhŒK flag would have: connecting to UNIX sockets within the same domain (where ”…”�”}”(hj*h²hh³Nh´Nubj«)�”}”(hŒ#``LANDLOCK_ACCESS_FS_RESOLVE_UNIX``”h]”hŒLANDLOCK_ACCESS_FS_RESOLVE_UNIX”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj*ubhŒ% is used) is unconditionally allowed.”…”�”}”(hj*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Kkhj³h²hubj()�”}”(hŒThe reasoning is:”h]”hŒThe reasoning is:”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Krhj³h²hubjÁ)�”}”(hhh]”(jÆ)�”}”(hŒöLike other IPC mechanisms, connecting to named UNIX sockets in the same domain should be expected and harmless. (If needed, users can further refine their Landlock policies with nested domains or by restricting ``LANDLOCK_ACCESS_FS_MAKE_SOCK``.)”h]”j()�”}”(hŒöLike other IPC mechanisms, connecting to named UNIX sockets in the same domain should be expected and harmless. (If needed, users can further refine their Landlock policies with nested domains or by restricting ``LANDLOCK_ACCESS_FS_MAKE_SOCK``.)”h]”(hŒÔLike other IPC mechanisms, connecting to named UNIX sockets in the same domain should be expected and harmless. (If needed, users can further refine their Landlock policies with nested domains or by restricting ”…”�”}”(hjƒh²hh³Nh´Nubj«)�”}”(hŒ ``LANDLOCK_ACCESS_FS_MAKE_SOCK``”h]”hŒLANDLOCK_ACCESS_FS_MAKE_SOCK”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjƒubhŒ.)”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Kthjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj|h²hh³hÇh´NubjÆ)�”}”(hŒÌWe reserve the option to still introduce ``LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET`` in the future. (This would be useful if we wanted to have a Landlock rule to permit IPC access to other Landlock domains.)”h]”j()�”}”(hŒÌWe reserve the option to still introduce ``LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET`` in the future. (This would be useful if we wanted to have a Landlock rule to permit IPC access to other Landlock domains.)”h]”(hŒ)We reserve the option to still introduce ”…”�”}”(hj­h²hh³Nh´Nubj«)�”}”(hŒ'``LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET``”h]”hŒ#LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj­ubhŒ| in the future. (This would be useful if we wanted to have a Landlock rule to permit IPC access to other Landlock domains.)”…”�”}”(hj­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Kxhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj|h²hh³hÇh´NubjÆ)�”}”(hŒóBut we can postpone the point in time when users have to deal with two interacting flags visible in the userspace API. (In particular, it is possible that it won't be needed in practice, in which case we can avoid the second flag altogether.)”h]”j()�”}”(hŒóBut we can postpone the point in time when users have to deal with two interacting flags visible in the userspace API. (In particular, it is possible that it won't be needed in practice, in which case we can avoid the second flag altogether.)”h]”hŒõBut we can postpone the point in time when users have to deal with two interacting flags visible in the userspace API. (In particular, it is possible that it won’t be needed in practice, in which case we can avoid the second flag altogether.)”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K|hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj|h²hh³hÇh´NubjÆ)�”}”(hŒüIf we *do* introduce ``LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET`` in the future, setting this scoped flag in a ruleset does *not reduce* the restrictions, because access within the same scope is already allowed based on ``LANDLOCK_ACCESS_FS_RESOLVE_UNIX``. ”h]”j()�”}”(hŒûIf we *do* introduce ``LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET`` in the future, setting this scoped flag in a ruleset does *not reduce* the restrictions, because access within the same scope is already allowed based on ``LANDLOCK_ACCESS_FS_RESOLVE_UNIX``.”h]”(hŒIf we ”…”�”}”(hjïh²hh³Nh´Nubjß)�”}”(hŒ*do*”h]”hŒdo”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjïubhŒ introduce ”…”�”}”(hjïh²hh³Nh´Nubj«)�”}”(hŒ'``LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET``”h]”hŒ#LANDLOCK_SCOPE_PATHNAME_UNIX_SOCKET”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjïubhŒ; in the future, setting this scoped flag in a ruleset does ”…”�”}”(hjïh²hh³Nh´Nubjß)�”}”(hŒ *not reduce*”h]”hŒ not reduce”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjïubhŒT the restrictions, because access within the same scope is already allowed based on ”…”�”}”(hjïh²hh³Nh´Nubj«)�”}”(hŒ#``LANDLOCK_ACCESS_FS_RESOLVE_UNIX``”h]”hŒLANDLOCK_ACCESS_FS_RESOLVE_UNIX”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjïubhŒ.”…”�”}”(hjïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K€hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj|h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jvjwuh1jÀh³hÇh´Kthj³h²hubeh}”(h]”(Œ8interaction-between-scoped-flags-and-other-access-rights”jªeh ]”h"]”(Œ8interaction between scoped flags and other access rights”Œscoped-flags-interaction”eh$]”h&]”uh1hòhj€h²hh³hÇh´K`Œexpect_referenced_by_name”}”jWj sŒexpect_referenced_by_id”}”jªj subeh}”(h]”Œdesign-choices”ah ]”h"]”Œdesign choices”ah$]”h&]”uh1hòhhôh²hh³hÇh´K7ubhó)�”}”(hhh]”(hø)�”}”(hŒTests”h]”hŒTests”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hjfh²hh³hÇh´K†ubj()�”}”(hŒ�Userspace tests for backward compatibility, ptrace restrictions and filesystem support can be found here: `tools/testing/selftests/landlock/`_.”h]”(hŒjUserspace tests for backward compatibility, ptrace restrictions and filesystem support can be found here: ”…”�”}”(hjwh²hh³Nh´Nubj4)�”}”(hŒ$`tools/testing/selftests/landlock/`_”h]”hŒ!tools/testing/selftests/landlock/”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ!tools/testing/selftests/landlock/”Œrefuri”Œghttps://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/tools/testing/selftests/landlock/”uh1j3hjwjGKubhŒ.”…”�”}”(hjwh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´Kˆhjfh²hubeh}”(h]”Œtests”ah ]”h"]”Œtests”ah$]”h&]”uh1hòhhôh²hh³hÇh´K†ubhó)�”}”(hhh]”(hø)�”}”(hŒKernel structures”h]”hŒKernel structures”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hj£h²hh³hÇh´KŒubhó)�”}”(hhh]”(hø)�”}”(hŒObject”h]”hŒObject”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hj´h²hh³hÇh´K�ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ#landlock_object_underops (C struct)”Œc.landlock_object_underops”hNt”auh1jÅhj´h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒlandlock_object_underops”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct landlock_object_underops”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jèhjäh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1júhjäh²hh³jùh´KubhŒ desc_name”“”)�”}”(hŒlandlock_object_underops”h]”hŒ desc_sig_name”“”)�”}”(hjàh]”hŒlandlock_object_underops”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j hjäh²hh³jùh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1jâŒsphinx_line_type”Œ declarator”hjÞh²hh³jùh´Kubah}”(h]”jÔah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jÜh³jùh´KhjÙh²hubhŒ desc_content”“”)�”}”(hhh]”j()�”}”(hŒ"Operations on an underlying object”h]”hŒ"Operations on an underlying object”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´Khj?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjÙh²hh³jùh´Kubeh}”(h]”h ]”(Œc”Œstruct”eh"]”h$]”h&]”Œdomain”jZŒobjtype”j[Œdesctype”j[Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j×h²hhj´h³jÖh´NubhŒ container”“”)�”}”(hŒç**Definition**:: struct landlock_object_underops { void (*release)(struct landlock_object *const object) __releases(object->lock); }; **Members** ``release`` Releases the underlying object (e.g. iput() for an inode).”h]”(j()�”}”(hŒ**Definition**::”h]”(hŒstrong”“”)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjkubhŒ:”…”�”}”(hjkh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´KhjgubhŒ literal_block”“”)�”}”(hŒxstruct landlock_object_underops { void (*release)(struct landlock_object *const object) __releases(object->lock); };”h]”hŒxstruct landlock_object_underops { void (*release)(struct landlock_object *const object) __releases(object->lock); };”…”�”}”hjŒsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´Khjgubj()�”}”(hŒ **Members**”h]”jp)�”}”(hj�h]”hŒMembers”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´KhjgubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒF``release`` Releases the underlying object (e.g. iput() for an inode).”h]”(hŒterm”“”)�”}”(hŒ ``release``”h]”j«)�”}”(hjÂh]”hŒrelease”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´KhjºubhŒ definition”“”)�”}”(hhh]”j()�”}”(hŒ:Releases the underlying object (e.g. iput() for an inode).”h]”hŒ:Releases the underlying object (e.g. iput() for an inode).”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´KhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j×h´Khjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjgubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj´h²hh³jÖh´NubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_object (C struct)”Œc.landlock_object”hNt”auh1jÅhj´h²hh³jÖh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_object”h]”jã)�”}”(hŒstruct landlock_object”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´Kubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjh²hh³j+h´Kubj )�”}”(hŒlandlock_object”h]”j)�”}”(hjh]”hŒlandlock_object”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjh²hh³j+h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjh²hh³j+h´Kubah}”(h]”jah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³j+h´Khjh²hubj>)�”}”(hhh]”j()�”}”(hŒ%Security blob tied to a kernel object”h]”hŒ%Security blob tied to a kernel object”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´Khj]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjh²hh³j+h´Kubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`jxjajxjb‰jc‰jd‰uh1j×h²hhj´h³jÖh´Nubjf)�”}”(hXµ**Definition**:: struct landlock_object { refcount_t usage; spinlock_t lock; void *underobj; union { struct rcu_head rcu_free; const struct landlock_object_underops *underops; }; }; **Members** ``usage`` This counter is used to tie an object to the rules matching it or to keep it alive while adding a new rule. If this counter reaches zero, this struct must not be modified, but this counter can still be read from within an RCU read-side critical section. When adding a new rule to an object with a usage counter of zero, we must wait until the pointer to this object is set to NULL (or recycled). ``lock`` Protects against concurrent modifications. This lock must be held from the time **usage** drops to zero until any weak references from **underobj** to this object have been cleaned up. Lock ordering: inode->i_lock nests inside this. ``underobj`` Used when cleaning up an object and to mark an object as tied to its underlying kernel structure. This pointer is protected by **lock**. Cf. landlock_release_inodes() and release_inode(). ``{unnamed_union}`` anonymous ``rcu_free`` Enables lockless use of **usage**, **lock** and **underobj** from within an RCU read-side critical section. **rcu_free** and **underops** are only used by landlock_put_object(). ``underops`` Enables landlock_put_object() to release the underlying object (e.g. inode).”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj€ubhŒ:”…”�”}”(hj€h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´K"hj|ubj‹)�”}”(hŒÈstruct landlock_object { refcount_t usage; spinlock_t lock; void *underobj; union { struct rcu_head rcu_free; const struct landlock_object_underops *underops; }; };”h]”hŒÈstruct landlock_object { refcount_t usage; spinlock_t lock; void *underobj; union { struct rcu_head rcu_free; const struct landlock_object_underops *underops; }; };”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´K$hj|ubj()�”}”(hŒ **Members**”h]”jp)�”}”(hj®h]”hŒMembers”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´K.hj|ubj´)�”}”(hhh]”(j¹)�”}”(hX˜``usage`` This counter is used to tie an object to the rules matching it or to keep it alive while adding a new rule. If this counter reaches zero, this struct must not be modified, but this counter can still be read from within an RCU read-side critical section. When adding a new rule to an object with a usage counter of zero, we must wait until the pointer to this object is set to NULL (or recycled). ”h]”(j¿)�”}”(hŒ ``usage``”h]”j«)�”}”(hjÍh]”hŒusage”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´K/hjÇubjÙ)�”}”(hhh]”j()�”}”(hX�This counter is used to tie an object to the rules matching it or to keep it alive while adding a new rule. If this counter reaches zero, this struct must not be modified, but this counter can still be read from within an RCU read-side critical section. When adding a new rule to an object with a usage counter of zero, we must wait until the pointer to this object is set to NULL (or recycled).”h]”hX�This counter is used to tie an object to the rules matching it or to keep it alive while adding a new rule. If this counter reaches zero, this struct must not be modified, but this counter can still be read from within an RCU read-side critical section. When adding a new rule to an object with a usage counter of zero, we must wait until the pointer to this object is set to NULL (or recycled).”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´K*hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jâh´K/hjÄubj¹)�”}”(hŒô``lock`` Protects against concurrent modifications. This lock must be held from the time **usage** drops to zero until any weak references from **underobj** to this object have been cleaned up. Lock ordering: inode->i_lock nests inside this. ”h]”(j¿)�”}”(hŒ``lock``”h]”j«)�”}”(hjh]”hŒlock”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´K7hjubjÙ)�”}”(hhh]”(j()�”}”(hŒ¹Protects against concurrent modifications. This lock must be held from the time **usage** drops to zero until any weak references from **underobj** to this object have been cleaned up.”h]”(hŒQProtects against concurrent modifications. This lock must be held from the time ”…”�”}”(hj h²hh³Nh´Nubjp)�”}”(hŒ **usage**”h]”hŒusage”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj ubhŒ. drops to zero until any weak references from ”…”�”}”(hj h²hh³Nh´Nubjp)�”}”(hŒ **underobj**”h]”hŒunderobj”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj ubhŒ% to this object have been cleaned up.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´K3hjubj()�”}”(hŒ/Lock ordering: inode->i_lock nests inside this.”h]”hŒ/Lock ordering: inode->i_lock nests inside this.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jh´K7hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jh´K7hjÄubj¹)�”}”(hŒË``underobj`` Used when cleaning up an object and to mark an object as tied to its underlying kernel structure. This pointer is protected by **lock**. Cf. landlock_release_inodes() and release_inode(). ”h]”(j¿)�”}”(hŒ ``underobj``”h]”j«)�”}”(hjsh]”hŒunderobj”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´K=hjmubjÙ)�”}”(hhh]”j()�”}”(hŒ½Used when cleaning up an object and to mark an object as tied to its underlying kernel structure. This pointer is protected by **lock**. Cf. landlock_release_inodes() and release_inode().”h]”(hŒ€Used when cleaning up an object and to mark an object as tied to its underlying kernel structure. This pointer is protected by ”…”�”}”(hjŒh²hh³Nh´Nubjp)�”}”(hŒ**lock**”h]”hŒlock”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjŒubhŒ5. Cf. landlock_release_inodes() and release_inode().”…”�”}”(hjŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´K;hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jˆh´K=hjÄubj¹)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¿)�”}”(hŒ``{unnamed_union}``”h]”j«)�”}”(hj¿h]”hŒ{unnamed_union}”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´Khj¹ubjÙ)�”}”(hhh]”j()�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jÔh´KhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jÔh´KhjÄubj¹)�”}”(hŒ¿``rcu_free`` Enables lockless use of **usage**, **lock** and **underobj** from within an RCU read-side critical section. **rcu_free** and **underops** are only used by landlock_put_object(). ”h]”(j¿)�”}”(hŒ ``rcu_free``”h]”j«)�”}”(hjøh]”hŒrcu_free”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´KEhjòubjÙ)�”}”(hhh]”j()�”}”(hŒ±Enables lockless use of **usage**, **lock** and **underobj** from within an RCU read-side critical section. **rcu_free** and **underops** are only used by landlock_put_object().”h]”(hŒEnables lockless use of ”…”�”}”(hj h²hh³Nh´Nubjp)�”}”(hŒ **usage**”h]”hŒusage”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj ubhŒ, ”…”�”}”(hj h²hh³Nh´Nubjp)�”}”(hŒ**lock**”h]”hŒlock”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj ubhŒ and ”…”�”}”(hj h²hh³Nh´Nubjp)�”}”(hŒ **underobj**”h]”hŒunderobj”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj ubhŒ0 from within an RCU read-side critical section. ”…”�”}”(hj h²hh³Nh´Nubjp)�”}”(hŒ **rcu_free**”h]”hŒrcu_free”…”�”}”(hjO h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj ubhŒ and ”…”�”}”(hj h²hh³Nh´Nubjp)�”}”(hŒ **underops**”h]”hŒunderops”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj ubhŒ( are only used by landlock_put_object().”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´KBhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j h´KEhjÄubj¹)�”}”(hŒY``underops`` Enables landlock_put_object() to release the underlying object (e.g. inode).”h]”(j¿)�”}”(hŒ ``underops``”h]”j«)�”}”(hjŒ h]”hŒunderops”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjŠ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´KIhj† ubjÙ)�”}”(hhh]”j()�”}”(hŒLEnables landlock_put_object() to release the underlying object (e.g. inode).”h]”hŒLEnables landlock_put_object() to release the underlying object (e.g. inode).”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j¡ h´KIhj¢ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj† ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j¡ h´KIhjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hj|ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj´h²hh³jÖh´Nubj()�”}”(hŒ**Description**”h]”jp)�”}”(hjÎ h]”hŒ Description”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjÌ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´KMhj´h²hubj()�”}”(hŒÛThe goal of this structure is to enable to tie a set of ephemeral access rights (pertaining to different domains) to a kernel object (e.g an inode) in a safe way. This implies to handle concurrent use and modification.”h]”hŒÛThe goal of this structure is to enable to tie a set of ephemeral access rights (pertaining to different domains) to a kernel object (e.g an inode) in a safe way. This implies to handle concurrent use and modification.”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´Khj´h²hubj()�”}”(hŒjThe lifetime of a :c:type:`struct landlock_object ` depends on the rules referring to it.”h]”(hŒThe lifetime of a ”…”�”}”(hjó h²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct landlock_object `”h]”j«)�”}”(hjý h]”hŒstruct landlock_object”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”(Œxref”jZŒc-type”eh"]”h$]”h&]”uh1jªhjû ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œsecurity/landlock”Œ refdomain”jZŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”sbŒ reftarget”Œlandlock_object”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:145: ./security/landlock/object.h”h´K#hjó ubhŒ& depends on the rules referring to it.”…”�”}”(hjó h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j% h´K#hj´h²hubeh}”(h]”Œobject”ah ]”h"]”Œobject”ah$]”h&]”uh1hòhj£h²hh³hÇh´K�ubhó)�”}”(hhh]”(hø)�”}”(hŒ Filesystem”h]”hŒ Filesystem”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hj8 h²hh³hÇh´K•ubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ"landlock_inode_security (C struct)”Œc.landlock_inode_security”hNt”auh1jÅhj8 h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_inode_security”h]”jã)�”}”(hŒstruct landlock_inode_security”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj^ h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´Kubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj^ h²hh³jo h´Kubj )�”}”(hŒlandlock_inode_security”h]”j)�”}”(hj\ h]”hŒlandlock_inode_security”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~ ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hj^ h²hh³jo h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjZ h²hh³jo h´Kubah}”(h]”jU ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³jo h´KhjW h²hubj>)�”}”(hhh]”j()�”}”(hŒInode security blob”h]”hŒInode security blob”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´Khj¡ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjW h²hh³jo h´Kubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`j¼ jaj¼ jb‰jc‰jd‰uh1j×h²hhj8 h³Nh´Nubjf)�”}”(hXz**Definition**:: struct landlock_inode_security { struct landlock_object *object; }; **Members** ``object`` Weak pointer to an allocated object. All assignments of a new object are protected by the underlying inode->i_lock. However, atomically disassociating **object** from the inode is only protected by **object->lock**, from the time **object**'s usage refcount drops to zero to the time this pointer is nulled out (cf. release_inode() and hook_sb_delete()). Indeed, such disassociation doesn't require inode->i_lock thanks to the careful rcu_access_pointer() check performed by get_inode_object().”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjÄ ubhŒ:”…”�”}”(hjÄ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´KhjÀ ubj‹)�”}”(hŒGstruct landlock_inode_security { struct landlock_object *object; };”h]”hŒGstruct landlock_inode_security { struct landlock_object *object; };”…”�”}”hjá sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K!hjÀ ubj()�”}”(hŒ **Members**”h]”jp)�”}”(hjò h]”hŒMembers”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjð ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K%hjÀ ubj´)�”}”(hhh]”j¹)�”}”(hXü``object`` Weak pointer to an allocated object. All assignments of a new object are protected by the underlying inode->i_lock. However, atomically disassociating **object** from the inode is only protected by **object->lock**, from the time **object**'s usage refcount drops to zero to the time this pointer is nulled out (cf. release_inode() and hook_sb_delete()). Indeed, such disassociation doesn't require inode->i_lock thanks to the careful rcu_access_pointer() check performed by get_inode_object().”h]”(j¿)�”}”(hŒ ``object``”h]”j«)�”}”(hj h]”hŒobject”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K)hj ubjÙ)�”}”(hhh]”j()�”}”(hXñWeak pointer to an allocated object. All assignments of a new object are protected by the underlying inode->i_lock. However, atomically disassociating **object** from the inode is only protected by **object->lock**, from the time **object**'s usage refcount drops to zero to the time this pointer is nulled out (cf. release_inode() and hook_sb_delete()). Indeed, such disassociation doesn't require inode->i_lock thanks to the careful rcu_access_pointer() check performed by get_inode_object().”h]”(hŒ™Weak pointer to an allocated object. All assignments of a new object are protected by the underlying inode->i_lock. However, atomically disassociating ”…”�”}”(hj* h²hh³Nh´Nubjp)�”}”(hŒ **object**”h]”hŒobject”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj* ubhŒ% from the inode is only protected by ”…”�”}”(hj* h²hh³Nh´Nubjp)�”}”(hŒ**object->lock**”h]”hŒ object->lock”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj* ubhŒ, from the time ”…”�”}”(hj* h²hh³Nh´Nubjp)�”}”(hŒ **object**”h]”hŒobject”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj* ubhX’s usage refcount drops to zero to the time this pointer is nulled out (cf. release_inode() and hook_sb_delete()). Indeed, such disassociation doesn’t require inode->i_lock thanks to the careful rcu_access_pointer() check performed by get_inode_object().”…”�”}”(hj* h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K#hj' ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j& h´K)hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjÀ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj8 h²hh³Nh´Nubj()�”}”(hŒ**Description**”h]”jp)�”}”(hjŠ h]”hŒ Description”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K-hj8 h²hubj()�”}”(hŒsEnable to reference a :c:type:`struct landlock_object ` tied to an inode (i.e. underlying object).”h]”(hŒEnable to reference a ”…”�”}”(hj  h²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct landlock_object `”h]”j«)�”}”(hjª h]”hŒstruct landlock_object”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”(j jZŒc-type”eh"]”h$]”h&]”uh1jªhj¨ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jZŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j j j# Œlandlock_object”uh1hh³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´Khj  ubhŒ+ tied to an inode (i.e. underlying object).”…”�”}”(hj  h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jÇ h´Khj8 h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ!landlock_file_security (C struct)”Œc.landlock_file_security”hNt”auh1jÅhj8 h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_file_security”h]”jã)�”}”(hŒstruct landlock_file_security”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjç h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K"ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjç h²hh³jø h´K"ubj )�”}”(hŒlandlock_file_security”h]”j)�”}”(hjå h]”hŒlandlock_file_security”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjç h²hh³jø h´K"ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjã h²hh³jø h´K"ubah}”(h]”jÞ ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³jø h´K"hjà h²hubj>)�”}”(hhh]”j()�”}”(hŒFile security blob”h]”hŒFile security blob”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K/hj* h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjà h²hh³jø h´K"ubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`jE jajE jb‰jc‰jd‰uh1j×h²hhj8 h³Nh´Nubjf)�”}”(hXö**Definition**:: struct landlock_file_security { access_mask_t allowed_access; #ifdef CONFIG_SECURITY_LANDLOCK_LOG; deny_masks_t deny_masks; optional_access_t quiet_optional_accesses; u8 fown_layer; #endif ; struct landlock_cred_security fown_subject; struct pid *fown_tg; }; **Members** ``allowed_access`` Access rights that were available at the time of opening the file. This is not necessarily the full set of access rights available at that time, but it's the necessary subset as needed to authorize later operations on the open file. ``deny_masks`` Domain layer levels that deny an optional access (see _LANDLOCK_ACCESS_FS_OPTIONAL). ``quiet_optional_accesses`` Stores which optional accesses are covered by quiet rules within the layer referred to in deny_masks, one access per bit. Does not take into account whether the quiet access bits are actually set in the layer's corresponding landlock_hierarchy. ``fown_layer`` Layer level of **fown_subject->domain** with LANDLOCK_SCOPE_SIGNAL. ``fown_subject`` Landlock credential of the task that set the PID that may receive a signal e.g., SIGURG when writing MSG_OOB to the related socket. This pointer is protected by the related file->f_owner->lock, as for fown_struct's members: pid, uid, and euid. ``fown_tg`` Thread group of the task that set the file owner, pinned while **fown_subject** holds a domain. It lets hook_file_send_sigiotask() always allow a SIGIO delivered to the owner's own process -- e.g. the thread-group leader reached through a process-group owner -- matching the same-process exemption of hook_task_kill(). NULL when no domain is recorded. Protected by file->f_owner->lock, like **fown_subject**.”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjM ubhŒ:”…”�”}”(hjM h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K3hjI ubj‹)�”}”(hXstruct landlock_file_security { access_mask_t allowed_access; #ifdef CONFIG_SECURITY_LANDLOCK_LOG; deny_masks_t deny_masks; optional_access_t quiet_optional_accesses; u8 fown_layer; #endif ; struct landlock_cred_security fown_subject; struct pid *fown_tg; };”h]”hXstruct landlock_file_security { access_mask_t allowed_access; #ifdef CONFIG_SECURITY_LANDLOCK_LOG; deny_masks_t deny_masks; optional_access_t quiet_optional_accesses; u8 fown_layer; #endif ; struct landlock_cred_security fown_subject; struct pid *fown_tg; };”…”�”}”hjj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K5hjI ubj()�”}”(hŒ **Members**”h]”jp)�”}”(hj{ h]”hŒMembers”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K@hjI ubj´)�”}”(hhh]”(j¹)�”}”(hŒü``allowed_access`` Access rights that were available at the time of opening the file. This is not necessarily the full set of access rights available at that time, but it's the necessary subset as needed to authorize later operations on the open file. ”h]”(j¿)�”}”(hŒ``allowed_access``”h]”j«)�”}”(hjš h]”hŒallowed_access”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj˜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´Kdomain** with LANDLOCK_SCOPE_SIGNAL. ”h]”(j¿)�”}”(hŒ``fown_layer``”h]”j«)�”}”(hjH h]”hŒ fown_layer”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjF ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´KOhjB ubjÙ)�”}”(hhh]”j()�”}”(hŒCLayer level of **fown_subject->domain** with LANDLOCK_SCOPE_SIGNAL.”h]”(hŒLayer level of ”…”�”}”(hja h²hh³Nh´Nubjp)�”}”(hŒ**fown_subject->domain**”h]”hŒfown_subject->domain”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johja ubhŒ with LANDLOCK_SCOPE_SIGNAL.”…”�”}”(hja h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´KNhj^ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjB ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j] h´KOhj‘ ubj¹)�”}”(hX``fown_subject`` Landlock credential of the task that set the PID that may receive a signal e.g., SIGURG when writing MSG_OOB to the related socket. This pointer is protected by the related file->f_owner->lock, as for fown_struct's members: pid, uid, and euid. ”h]”(j¿)�”}”(hŒ``fown_subject``”h]”j«)�”}”(hj” h]”hŒ fown_subject”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj’ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´KYhjŽ ubjÙ)�”}”(hhh]”j()�”}”(hŒôLandlock credential of the task that set the PID that may receive a signal e.g., SIGURG when writing MSG_OOB to the related socket. This pointer is protected by the related file->f_owner->lock, as for fown_struct's members: pid, uid, and euid.”h]”hŒöLandlock credential of the task that set the PID that may receive a signal e.g., SIGURG when writing MSG_OOB to the related socket. This pointer is protected by the related file->f_owner->lock, as for fown_struct’s members: pid, uid, and euid.”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´KUhjª ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjŽ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j© h´KYhj‘ ubj¹)�”}”(hX§``fown_tg`` Thread group of the task that set the file owner, pinned while **fown_subject** holds a domain. It lets hook_file_send_sigiotask() always allow a SIGIO delivered to the owner's own process -- e.g. the thread-group leader reached through a process-group owner -- matching the same-process exemption of hook_task_kill(). NULL when no domain is recorded. Protected by file->f_owner->lock, like **fown_subject**.”h]”(j¿)�”}”(hŒ ``fown_tg``”h]”j«)�”}”(hjÎ h]”hŒfown_tg”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÌ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´KbhjÈ ubjÙ)�”}”(hhh]”j()�”}”(hX›Thread group of the task that set the file owner, pinned while **fown_subject** holds a domain. It lets hook_file_send_sigiotask() always allow a SIGIO delivered to the owner's own process -- e.g. the thread-group leader reached through a process-group owner -- matching the same-process exemption of hook_task_kill(). NULL when no domain is recorded. Protected by file->f_owner->lock, like **fown_subject**.”h]”(hŒ?Thread group of the task that set the file owner, pinned while ”…”�”}”(hjç h²hh³Nh´Nubjp)�”}”(hŒ**fown_subject**”h]”hŒ fown_subject”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjç ubhX= holds a domain. It lets hook_file_send_sigiotask() always allow a SIGIO delivered to the owner’s own process -- e.g. the thread-group leader reached through a process-group owner -- matching the same-process exemption of hook_task_kill(). NULL when no domain is recorded. Protected by file->f_owner->lock, like ”…”�”}”(hjç h²hh³Nh´Nubjp)�”}”(hŒ**fown_subject**”h]”hŒ fown_subject”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjç ubhŒ.”…”�”}”(hjç h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K]hjä ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjÈ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jã h´Kbhj‘ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hjI ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj8 h²hh³Nh´Nubj()�”}”(hŒ**Description**”h]”jp)�”}”(hj5h]”hŒ Description”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´Kfhj8 h²hubj()�”}”(hXThis information is populated when opening a file in hook_file_open, and tracks the relevant Landlock access rights that were available at the time of opening the file. Other LSM hooks use these rights in order to authorize operations on already opened files.”h]”hXThis information is populated when opening a file in hook_file_open, and tracks the relevant Landlock access rights that were available at the time of opening the file. Other LSM hooks use these rights in order to authorize operations on already opened files.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K0hj8 h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ'landlock_superblock_security (C struct)”Œc.landlock_superblock_security”hNt”auh1jÅhj8 h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_superblock_security”h]”jã)�”}”(hŒ#struct landlock_superblock_security”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjoh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”•h´K8ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjoh²hh³j€h´K8ubj )�”}”(hŒlandlock_superblock_security”h]”j)�”}”(hjmh]”hŒlandlock_superblock_security”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjoh²hh³j€h´K8ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjkh²hh³j€h´K8ubah}”(h]”jfah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³j€h´K8hjhh²hubj>)�”}”(hhh]”j()�”}”(hŒSuperblock security blob”h]”hŒSuperblock security blob”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´Kzhj²h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjhh²hh³j€h´K8ubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`jÍjajÍjb‰jc‰jd‰uh1j×h²hhj8 h³Nh´Nubjf)�”}”(hX **Definition**:: struct landlock_superblock_security { atomic_long_t inode_refs; }; **Members** ``inode_refs`` Number of pending inodes (from this superblock) that are being released by release_inode(). Cf. struct super_block->s_fsnotify_inode_refs .”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjÕubhŒ:”…”�”}”(hjÕh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K~hjÑubj‹)�”}”(hŒFstruct landlock_superblock_security { atomic_long_t inode_refs; };”h]”hŒFstruct landlock_superblock_security { atomic_long_t inode_refs; };”…”�”}”hjòsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K€hjÑubj()�”}”(hŒ **Members**”h]”jp)�”}”(hjh]”hŒMembers”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K„hjÑubj´)�”}”(hhh]”j¹)�”}”(hŒš``inode_refs`` Number of pending inodes (from this superblock) that are being released by release_inode(). Cf. struct super_block->s_fsnotify_inode_refs .”h]”(j¿)�”}”(hŒ``inode_refs``”h]”j«)�”}”(hj"h]”hŒ inode_refs”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K‚hjubjÙ)�”}”(hhh]”j()�”}”(hŒ‹Number of pending inodes (from this superblock) that are being released by release_inode(). Cf. struct super_block->s_fsnotify_inode_refs .”h]”hŒ‹Number of pending inodes (from this superblock) that are being released by release_inode(). Cf. struct super_block->s_fsnotify_inode_refs .”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K�hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j7h´K‚hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hjÑubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj8 h²hh³Nh´Nubj()�”}”(hŒ**Description**”h]”jp)�”}”(hjeh]”hŒ Description”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K†hj8 h²hubj()�”}”(hŒHEnable hook_sb_delete() to wait for concurrent calls to release_inode().”h]”hŒHEnable hook_sb_delete() to wait for concurrent calls to release_inode().”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K{hj8 h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ#resolve_path_for_trace (C function)”Œc.resolve_path_for_trace”hNt”auh1jÅhj8 h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒHconst char * resolve_path_for_trace (const struct path *path, char *buf)”h]”jã)�”}”(hŒFconst char *resolve_path_for_trace(const struct path *path, char *buf)”h]”(jé)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjŸh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjŸh²hh³j±h´K ubhŒdesc_sig_keyword_type”“”)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jÀhjŸh²hh³j±h´K ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjŸh²hh³j±h´K ubhŒdesc_sig_punctuation”“”)�”}”(hjwh]”hŒ*”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jßhjŸh²hh³j±h´K ubj )�”}”(hŒresolve_path_for_trace”h]”j)�”}”(hŒresolve_path_for_trace”h]”hŒresolve_path_for_trace”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjïubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjŸh²hh³j±h´K ubhŒdesc_parameterlist”“”)�”}”(hŒ$(const struct path *path, char *buf)”h]”(hŒdesc_parameter”“”)�”}”(hŒconst struct path *path”h]”(jé)�”}”(hj¥h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjubjé)�”}”(hjìh]”hŒstruct”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjubh)�”}”(hhh]”j)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jZŒreftype”Œ identifier”Œ reftarget”jNŒmodname”NŒ classname”Nj j )�”}”j! ]”j Œ ASTIdentifier”“”)�”}”jbjõsbŒc.resolve_path_for_trace”†”asbuh1hhjubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjubjà)�”}”(hjwh]”hŒ*”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jëah"]”h$]”h&]”uh1jßhjubj)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj ubj)�”}”(hŒ char *buf”h]”(jÁ)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjŸubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjŸubjà)�”}”(hjwh]”hŒ*”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jëah"]”h$]”h&]”uh1jßhjŸubj)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jhjŸh²hh³j±h´K ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hj›h²hh³j±h´K ubah}”(h]”j–ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³j±h´K hj˜h²hubj>)�”}”(hhh]”j()�”}”(hŒ%Resolve a path for tracepoint display”h]”hŒ%Resolve a path for tracepoint display”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K hjóh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj˜h²hh³j±h´K ubeh}”(h]”h ]”(jZŒfunction”eh"]”h$]”h&]”j_jZj`jjajjb‰jc‰jd‰uh1j×h²hhj8 h³Nh´Nubjf)�”}”(hXò**Parameters** ``const struct path *path`` The path to resolve. ``char *buf`` A buffer of at least PATH_MAX bytes for the resolved path. **Description** Uses d_absolute_path() to produce a namespace-independent absolute path, unlike d_path() which resolves relative to the process's chroot. This ensures trace output is deterministic regardless of the tracer's mount namespace. **Return** A pointer into **buf** with the resolved path, or an error string ("", "").”h]”(j()�”}”(hŒ**Parameters**”h]”jp)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K¤hjubj´)�”}”(hhh]”(j¹)�”}”(hŒ1``const struct path *path`` The path to resolve. ”h]”(j¿)�”}”(hŒ``const struct path *path``”h]”j«)�”}”(hj7h]”hŒconst struct path *path”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K¢hj1ubjÙ)�”}”(hhh]”j()�”}”(hŒThe path to resolve.”h]”hŒThe path to resolve.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jLh´K¢hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jLh´K¢hj.ubj¹)�”}”(hŒI``char *buf`` A buffer of at least PATH_MAX bytes for the resolved path. ”h]”(j¿)�”}”(hŒ ``char *buf``”h]”j«)�”}”(hjph]”hŒ char *buf”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K£hjjubjÙ)�”}”(hhh]”j()�”}”(hŒ:A buffer of at least PATH_MAX bytes for the resolved path.”h]”hŒ:A buffer of at least PATH_MAX bytes for the resolved path.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j…h´K£hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j…h´K£hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hjubj()�”}”(hŒ**Description**”h]”jp)�”}”(hj«h]”hŒ Description”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K¥hjubj()�”}”(hŒáUses d_absolute_path() to produce a namespace-independent absolute path, unlike d_path() which resolves relative to the process's chroot. This ensures trace output is deterministic regardless of the tracer's mount namespace.”h]”hŒåUses d_absolute_path() to produce a namespace-independent absolute path, unlike d_path() which resolves relative to the process’s chroot. This ensures trace output is deterministic regardless of the tracer’s mount namespace.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K¤hjubj()�”}”(hŒ **Return**”h]”jp)�”}”(hjÒh]”hŒReturn”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´K©hjubj()�”}”(hŒbA pointer into **buf** with the resolved path, or an error string ("", "").”h]”(hŒA pointer into ”…”�”}”(hjèh²hh³Nh´Nubjp)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjèubhŒT with the resolved path, or an error string (“â€�, “â€�).”…”�”}”(hjèh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³ŒY/var/lib/git/docbuild/linux/Documentation/security/landlock:151: ./security/landlock/fs.h”h´Kªhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj8 h²hh³Nh´Nubeh}”(h]”Œ filesystem”ah ]”h"]”Œ filesystem”ah$]”h&]”uh1hòhj£h²hh³hÇh´K•ubhó)�”}”(hhh]”(hø)�”}”(hŒProcess credential”h]”hŒProcess credential”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hjh²hh³hÇh´K›ubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ!landlock_cred_security (C struct)”Œc.landlock_cred_security”hNt”auh1jÅhjh²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_cred_security”h]”jã)�”}”(hŒstruct landlock_cred_security”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj>h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Kubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj>h²hh³jOh´Kubj )�”}”(hŒlandlock_cred_security”h]”j)�”}”(hj<h]”hŒlandlock_cred_security”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hj>h²hh³jOh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hj:h²hh³jOh´Kubah}”(h]”j5ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³jOh´Khj7h²hubj>)�”}”(hhh]”j()�”}”(hŒCredential security blob”h]”hŒCredential security blob”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Khj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj7h²hh³jOh´Kubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`jœjajœjb‰jc‰jd‰uh1j×h²hhjh³Nh´Nubjf)�”}”(hX¶**Definition**:: struct landlock_cred_security { struct landlock_domain *domain; #ifdef CONFIG_SECURITY_LANDLOCK_LOG; u16 domain_exec; u8 log_subdomains_off : 1; #endif ; }; **Members** ``domain`` Immutable domain enforced on a task. ``domain_exec`` Bitmask identifying the domain layers that were enforced by the current task's executed file (i.e. no new execve(2) since landlock_restrict_self(2)). ``log_subdomains_off`` Set if the domain descendants's log_status should be set to ``LANDLOCK_LOG_DISABLED``. This is not a landlock_hierarchy configuration because it applies to future descendant domains and it does not require a current domain.”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj¤ubhŒ:”…”�”}”(hj¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Khj ubj‹)�”}”(hŒ¨struct landlock_cred_security { struct landlock_domain *domain; #ifdef CONFIG_SECURITY_LANDLOCK_LOG; u16 domain_exec; u8 log_subdomains_off : 1; #endif ; };”h]”hŒ¨struct landlock_cred_security { struct landlock_domain *domain; #ifdef CONFIG_SECURITY_LANDLOCK_LOG; u16 domain_exec; u8 log_subdomains_off : 1; #endif ; };”…”�”}”hjÁsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Khj ubj()�”}”(hŒ **Members**”h]”jp)�”}”(hjÒh]”hŒMembers”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´K'hj ubj´)�”}”(hhh]”(j¹)�”}”(hŒ0``domain`` Immutable domain enforced on a task. ”h]”(j¿)�”}”(hŒ ``domain``”h]”j«)�”}”(hjñh]”hŒdomain”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´K$hjëubjÙ)�”}”(hhh]”j()�”}”(hŒ$Immutable domain enforced on a task.”h]”hŒ$Immutable domain enforced on a task.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jh´K$hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jh´K$hjèubj¹)�”}”(hŒ¦``domain_exec`` Bitmask identifying the domain layers that were enforced by the current task's executed file (i.e. no new execve(2) since landlock_restrict_self(2)). ”h]”(j¿)�”}”(hŒ``domain_exec``”h]”j«)�”}”(hj*h]”hŒ domain_exec”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´K,hj$ubjÙ)�”}”(hhh]”j()�”}”(hŒ•Bitmask identifying the domain layers that were enforced by the current task's executed file (i.e. no new execve(2) since landlock_restrict_self(2)).”h]”hŒ—Bitmask identifying the domain layers that were enforced by the current task’s executed file (i.e. no new execve(2) since landlock_restrict_self(2)).”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´K*hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j?h´K,hjèubj¹)�”}”(hŒ÷``log_subdomains_off`` Set if the domain descendants's log_status should be set to ``LANDLOCK_LOG_DISABLED``. This is not a landlock_hierarchy configuration because it applies to future descendant domains and it does not require a current domain.”h]”(j¿)�”}”(hŒ``log_subdomains_off``”h]”j«)�”}”(hjdh]”hŒlog_subdomains_off”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´K2hj^ubjÙ)�”}”(hhh]”j()�”}”(hŒàSet if the domain descendants's log_status should be set to ``LANDLOCK_LOG_DISABLED``. This is not a landlock_hierarchy configuration because it applies to future descendant domains and it does not require a current domain.”h]”(hŒ>Set if the domain descendants’s log_status should be set to ”…”�”}”(hj}h²hh³Nh´Nubj«)�”}”(hŒ``LANDLOCK_LOG_DISABLED``”h]”hŒLANDLOCK_LOG_DISABLED”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj}ubhŒ‹. This is not a landlock_hierarchy configuration because it applies to future descendant domains and it does not require a current domain.”…”�”}”(hj}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´K0hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jyh´K2hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehjh²hh³Nh´Nubj()�”}”(hŒ**Description**”h]”jp)�”}”(hj¹h]”hŒ Description”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´K6hjh²hubj()�”}”(hŒ�This structure is packed to minimize the size of struct landlock_file_security. However, it is always aligned in the LSM cred blob, see lsm_set_blob_size().”h]”hŒ�This structure is packed to minimize the size of struct landlock_file_security. However, it is always aligned in the LSM cred blob, see lsm_set_blob_size().”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Khjh²hubj()�”}”(hŒ?When updating this, also update landlock_cred_copy() if needed.”h]”hŒ?When updating this, also update landlock_cred_copy() if needed.”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Khjh²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ,landlock_get_applicable_subject (C function)”Œ!c.landlock_get_applicable_subject”hNt”auh1jÅhjh²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒ¢const struct landlock_cred_security * landlock_get_applicable_subject (const struct cred *const cred, const struct access_masks masks, size_t *const handle_layer)”h]”jã)�”}”(hŒ const struct landlock_cred_security *landlock_get_applicable_subject(const struct cred *const cred, const struct access_masks masks, size_t *const handle_layer)”h]”(jé)�”}”(hj¥h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Kkubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjh²hh³jh´Kkubjé)�”}”(hjìh]”hŒstruct”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjh²hh³jh´Kkubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjh²hh³jh´Kkubh)�”}”(hhh]”j)�”}”(hŒlandlock_cred_security”h]”hŒlandlock_cred_security”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jZŒreftype”jbŒ reftarget”jBŒmodname”NŒ classname”Nj j )�”}”j! ]”jj)�”}”jbŒlandlock_get_applicable_subject”sbŒ!c.landlock_get_applicable_subject”†”asbuh1hhjh²hh³jh´Kkubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjh²hh³jh´Kkubjà)�”}”(hjwh]”hŒ*”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jëah"]”h$]”h&]”uh1jßhjh²hh³jh´Kkubj )�”}”(hŒlandlock_get_applicable_subject”h]”j)�”}”(hj^h]”hŒlandlock_get_applicable_subject”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjh²hh³jh´Kkubj)�”}”(hŒ\(const struct cred *const cred, const struct access_masks masks, size_t *const handle_layer)”h]”(j)�”}”(hŒconst struct cred *const cred”h]”(jé)�”}”(hj¥h]”hŒconst”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj—ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj—ubjé)�”}”(hjìh]”hŒstruct”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj—ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj—ubh)�”}”(hhh]”j)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jZŒreftype”jbŒ reftarget”jÖŒmodname”NŒ classname”Nj j )�”}”j! ]”j\Œ!c.landlock_get_applicable_subject”†”asbuh1hhj—ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj—ubjà)�”}”(hjwh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jëah"]”h$]”h&]”uh1jßhj—ubjé)�”}”(hj¥h]”hŒconst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj—ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj—ubj)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj“ubj)�”}”(hŒconst struct access_masks masks”h]”(jé)�”}”(hj¥h]”hŒconst”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj=ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj=ubjé)�”}”(hjìh]”hŒstruct”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj=ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj=ubh)�”}”(hhh]”j)�”}”(hŒ access_masks”h]”hŒ access_masks”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jZŒreftype”jbŒ reftarget”j|Œmodname”NŒ classname”Nj j )�”}”j! ]”j\Œ!c.landlock_get_applicable_subject”†”asbuh1hhj=ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj=ubj)�”}”(hŒmasks”h]”hŒmasks”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj“ubj)�”}”(hŒsize_t *const handle_layer”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jZŒreftype”jbŒ reftarget”jÄŒmodname”NŒ classname”Nj j )�”}”j! ]”j\Œ!c.landlock_get_applicable_subject”†”asbuh1hhj»ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj»ubjà)�”}”(hjwh]”hŒ*”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jëah"]”h$]”h&]”uh1jßhj»ubjé)�”}”(hj¥h]”hŒconst”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj»ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj»ubj)�”}”(hŒ handle_layer”h]”hŒ handle_layer”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj“ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jhjh²hh³jh´Kkubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjþh²hh³jh´Kkubah}”(h]”jùah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³jh´Kkhjûh²hubj>)�”}”(hhh]”j()�”}”(hŒ’Return the subject's Landlock credential if its enforced domain applies to (i.e. handles) at least one of the access rights specified in **masks**”h]”(hŒ‹Return the subject’s Landlock credential if its enforced domain applies to (i.e. handles) at least one of the access rights specified in ”…”�”}”(hj@h²hh³Nh´Nubjp)�”}”(hŒ **masks**”h]”hŒmasks”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Kkhj=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjûh²hh³jh´Kkubeh}”(h]”h ]”(jZŒfunction”eh"]”h$]”h&]”j_jZj`jfjajfjb‰jc‰jd‰uh1j×h²hhjh³Nh´Nubjf)�”}”(hXe**Parameters** ``const struct cred *const cred`` credential ``const struct access_masks masks`` access masks ``size_t *const handle_layer`` returned youngest layer handling a subset of **masks**. Not set if the function returns NULL. **Return** landlock_cred(**cred**) if any access rights specified in **masks** is handled, or NULL otherwise.”h]”(j()�”}”(hŒ**Parameters**”h]”jp)�”}”(hjph]”hŒ Parameters”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Kohjjubj´)�”}”(hhh]”(j¹)�”}”(hŒ-``const struct cred *const cred`` credential ”h]”(j¿)�”}”(hŒ!``const struct cred *const cred``”h]”j«)�”}”(hj�h]”hŒconst struct cred *const cred”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Kphj‰ubjÙ)�”}”(hhh]”j()�”}”(hŒ credential”h]”hŒ credential”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j¤h´Kphj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j¤h´Kphj†ubj¹)�”}”(hŒ1``const struct access_masks masks`` access masks ”h]”(j¿)�”}”(hŒ#``const struct access_masks masks``”h]”j«)�”}”(hjÈh]”hŒconst struct access_masks masks”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´KqhjÂubjÙ)�”}”(hhh]”j()�”}”(hŒ access masks”h]”hŒ access masks”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jÝh´KqhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jÝh´Kqhj†ubj¹)�”}”(hŒ~``size_t *const handle_layer`` returned youngest layer handling a subset of **masks**. Not set if the function returns NULL. ”h]”(j¿)�”}”(hŒ``size_t *const handle_layer``”h]”j«)�”}”(hjh]”hŒsize_t *const handle_layer”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´KshjûubjÙ)�”}”(hhh]”j()�”}”(hŒ^returned youngest layer handling a subset of **masks**. Not set if the function returns NULL.”h]”(hŒ-returned youngest layer handling a subset of ”…”�”}”(hjh²hh³Nh´Nubjp)�”}”(hŒ **masks**”h]”hŒmasks”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjubhŒ(. Not set if the function returns NULL.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Krhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jh´Kshj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hjjubj()�”}”(hŒ **Return**”h]”jp)�”}”(hjOh]”hŒReturn”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Kuhjjubj()�”}”(hŒblandlock_cred(**cred**) if any access rights specified in **masks** is handled, or NULL otherwise.”h]”(hŒlandlock_cred(”…”�”}”(hjeh²hh³Nh´Nubjp)�”}”(hŒ**cred**”h]”hŒcred”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjeubhŒ$) if any access rights specified in ”…”�”}”(hjeh²hh³Nh´Nubjp)�”}”(hŒ **masks**”h]”hŒmasks”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjeubhŒ is handled, or NULL otherwise.”…”�”}”(hjeh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ[/var/lib/git/docbuild/linux/Documentation/security/landlock:157: ./security/landlock/cred.h”h´Kuhjjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehjh²hh³Nh´Nubeh}”(h]”Œprocess-credential”ah ]”h"]”Œprocess credential”ah$]”h&]”uh1hòhj£h²hh³hÇh´K›ubhó)�”}”(hhh]”(hø)�”}”(hŒRuleset and domain”h]”hŒRuleset and domain”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hj§h²hh³hÇh´K¡ubj()�”}”(hX4A domain is a read-only ruleset tied to a set of subjects (i.e. tasks' credentials). Each time a ruleset is enforced on a task, the current domain is duplicated and the ruleset is imported as a new layer of rules in the new domain. Indeed, once in a domain, each rule is tied to a layer level. To grant access to an object, at least one rule of each layer must allow the requested action on the object. A task can then only transit to a new domain that is the intersection of the constraints from the current domain and those of a ruleset provided by the task.”h]”hX6A domain is a read-only ruleset tied to a set of subjects (i.e. tasks’ credentials). Each time a ruleset is enforced on a task, the current domain is duplicated and the ruleset is imported as a new layer of rules in the new domain. Indeed, once in a domain, each rule is tied to a layer level. To grant access to an object, at least one rule of each layer must allow the requested action on the object. A task can then only transit to a new domain that is the intersection of the constraints from the current domain and those of a ruleset provided by the task.”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K£hj§h²hubj()�”}”(hŒ…The definition of a subject is implicit for a task sandboxing itself, which makes the reasoning much easier and helps avoid pitfalls.”h]”hŒ…The definition of a subject is implicit for a task sandboxing itself, which makes the reasoning much easier and helps avoid pitfalls.”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K¬hj§h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_layer (C struct)”Œc.landlock_layer”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_layer”h]”jã)�”}”(hŒstruct landlock_layer”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjéh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Kubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjéh²hh³júh´Kubj )�”}”(hŒlandlock_layer”h]”j)�”}”(hjçh]”hŒlandlock_layer”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjéh²hh³júh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjåh²hh³júh´Kubah}”(h]”jàah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³júh´Khjâh²hubj>)�”}”(hhh]”j()�”}”(hŒAccess rights for a given layer”h]”hŒAccess rights for a given layer”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Khj,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjâh²hh³júh´Kubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`jGjajGjb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hXR**Definition**:: struct landlock_layer { u8 level; struct { u8 quiet : 1; } flags; access_mask_t access; }; **Members** ``level`` Position of this layer in the layer stack. Starts from 1. ``flags`` Bitfield for special flags attached to this rule. ``flags.quiet`` Suppresses denial logs for the object covered by this rule in this domain. For filesystem rules, this inherits down the file hierarchy. ``access`` Bitfield of allowed actions on the kernel object. They are relative to the object type (e.g. ``LANDLOCK_ACTION_FS_READ``).”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjOubhŒ:”…”�”}”(hjOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KhjKubj‹)�”}”(hŒrstruct landlock_layer { u8 level; struct { u8 quiet : 1; } flags; access_mask_t access; };”h]”hŒrstruct landlock_layer { u8 level; struct { u8 quiet : 1; } flags; access_mask_t access; };”…”�”}”hjlsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KhjKubj()�”}”(hŒ **Members**”h]”jp)�”}”(hj}h]”hŒMembers”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K&hjKubj´)�”}”(hhh]”(j¹)�”}”(hŒE``level`` Position of this layer in the layer stack. Starts from 1. ”h]”(j¿)�”}”(hŒ ``level``”h]”j«)�”}”(hjœh]”hŒlevel”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Khj–ubjÙ)�”}”(hhh]”j()�”}”(hŒ:Position of this layer in the layer stack. Starts from 1.”h]”hŒ:Position of this layer in the layer stack. Starts from 1.”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j±h´Khj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j±h´Khj“ubj¹)�”}”(hŒ<``flags`` Bitfield for special flags attached to this rule. ”h]”(j¿)�”}”(hŒ ``flags``”h]”j«)�”}”(hjÕh]”hŒflags”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K!hjÏubjÙ)�”}”(hhh]”j()�”}”(hŒ1Bitfield for special flags attached to this rule.”h]”hŒ1Bitfield for special flags attached to this rule.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jêh´K!hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jêh´K!hj“ubj¹)�”}”(hŒ™``flags.quiet`` Suppresses denial logs for the object covered by this rule in this domain. For filesystem rules, this inherits down the file hierarchy. ”h]”(j¿)�”}”(hŒ``flags.quiet``”h]”j«)�”}”(hjh]”hŒ flags.quiet”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K'hjubjÙ)�”}”(hhh]”j()�”}”(hŒˆSuppresses denial logs for the object covered by this rule in this domain. For filesystem rules, this inherits down the file hierarchy.”h]”hŒˆSuppresses denial logs for the object covered by this rule in this domain. For filesystem rules, this inherits down the file hierarchy.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K%hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j#h´K'hj“ubj¹)�”}”(hŒ†``access`` Bitfield of allowed actions on the kernel object. They are relative to the object type (e.g. ``LANDLOCK_ACTION_FS_READ``).”h]”(j¿)�”}”(hŒ ``access``”h]”j«)�”}”(hjHh]”hŒaccess”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K,hjBubjÙ)�”}”(hhh]”j()�”}”(hŒ{Bitfield of allowed actions on the kernel object. They are relative to the object type (e.g. ``LANDLOCK_ACTION_FS_READ``).”h]”(hŒ^Bitfield of allowed actions on the kernel object. They are relative to the object type (e.g. ”…”�”}”(hjah²hh³Nh´Nubj«)�”}”(hŒ``LANDLOCK_ACTION_FS_READ``”h]”hŒLANDLOCK_ACTION_FS_READ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjaubhŒ).”…”�”}”(hjah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j]h´K,hj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j]h´K,hj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hjKubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´NubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_key (C union)”Œc.landlock_key”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒ landlock_key”h]”jã)�”}”(hŒunion landlock_key”h]”(jé)�”}”(hŒunion”h]”hŒunion”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj¯h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K3ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj¯h²hh³jÁh´K3ubj )�”}”(hŒ landlock_key”h]”j)�”}”(hj­h]”hŒ landlock_key”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hj¯h²hh³jÁh´K3ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hj«h²hh³jÁh´K3ubah}”(h]”j¦ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³jÁh´K3hj¨h²hubj>)�”}”(hhh]”j()�”}”(hŒ!Key of a ruleset's red-black tree”h]”hŒ#Key of a ruleset’s red-black tree”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K2hjóh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj¨h²hh³jÁh´K3ubeh}”(h]”h ]”(jZŒunion”eh"]”h$]”h&]”j_jZj`jjajjb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hX **Definition**:: union landlock_key { struct landlock_object *object; uintptr_t data; }; **Members** ``object`` Pointer to identify a kernel object (e.g. an inode). ``data`` Raw data to identify an arbitrary 32-bit value (e.g. a TCP port).”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjubhŒ:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K6hjubj‹)�”}”(hŒOunion landlock_key { struct landlock_object *object; uintptr_t data; };”h]”hŒOunion landlock_key { struct landlock_object *object; uintptr_t data; };”…”�”}”hj3sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K8hjubj()�”}”(hŒ **Members**”h]”jp)�”}”(hjDh]”hŒMembers”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K=hjubj´)�”}”(hhh]”(j¹)�”}”(hŒ@``object`` Pointer to identify a kernel object (e.g. an inode). ”h]”(j¿)�”}”(hŒ ``object``”h]”j«)�”}”(hjch]”hŒobject”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K7hj]ubjÙ)�”}”(hhh]”j()�”}”(hŒ4Pointer to identify a kernel object (e.g. an inode).”h]”hŒ4Pointer to identify a kernel object (e.g. an inode).”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jxh´K7hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jxh´K7hjZubj¹)�”}”(hŒJ``data`` Raw data to identify an arbitrary 32-bit value (e.g. a TCP port).”h]”(j¿)�”}”(hŒ``data``”h]”j«)�”}”(hjœh]”hŒdata”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K;hj–ubjÙ)�”}”(hhh]”j()�”}”(hŒARaw data to identify an arbitrary 32-bit value (e.g. a TCP port).”h]”hŒARaw data to identify an arbitrary 32-bit value (e.g. a TCP port).”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j±h´K;hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j±h´K;hjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´NubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_key_type (C enum)”Œc.landlock_key_type”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_key_type”h]”jã)�”}”(hŒenum landlock_key_type”h]”(jé)�”}”(hŒenum”h]”hŒenum”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjñh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KBubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjñh²hh³jh´KBubj )�”}”(hŒlandlock_key_type”h]”j)�”}”(hjïh]”hŒlandlock_key_type”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjñh²hh³jh´KBubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjíh²hh³jh´KBubah}”(h]”jèah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³jh´KBhjêh²hubj>)�”}”(hhh]”j()�”}”(hŒ3Type of :c:type:`union landlock_key `”h]”(hŒType of ”…”�”}”(hj8h²hh³Nh´Nubh)�”}”(hŒ+:c:type:`union landlock_key `”h]”j«)�”}”(hjBh]”hŒunion landlock_key”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”(j jZŒc-type”eh"]”h$]”h&]”uh1jªhj@ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jZŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j j )�”}”j! ]”jj)�”}”jbjïsbŒc.landlock_key_type”†”asbj# Œ landlock_key”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Khj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KAhj5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjêh²hh³jh´KBubeh}”(h]”h ]”(jZŒenum”eh"]”h$]”h&]”j_jZj`jwjajwjb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hŒÝ**Constants** ``LANDLOCK_KEY_INODE`` Type of :c:type:`landlock_rules.root_inode `'s node keys. ``LANDLOCK_KEY_NET_PORT`` Type of :c:type:`landlock_rules.root_net_port `'s node keys.”h]”(j()�”}”(hŒ **Constants**”h]”jp)�”}”(hj�h]”hŒ Constants”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KEhj{ubj´)�”}”(hhh]”(j¹)�”}”(hŒa``LANDLOCK_KEY_INODE`` Type of :c:type:`landlock_rules.root_inode `'s node keys. ”h]”(j¿)�”}”(hŒ``LANDLOCK_KEY_INODE``”h]”j«)�”}”(hj h]”hŒLANDLOCK_KEY_INODE”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KHhjšubjÙ)�”}”(hhh]”j()�”}”(hŒIType of :c:type:`landlock_rules.root_inode `'s node keys.”h]”(hŒType of ”…”�”}”(hj¹h²hh³Nh´Nubh)�”}”(hŒ4:c:type:`landlock_rules.root_inode `”h]”j«)�”}”(hjÃh]”hŒlandlock_rules.root_inode”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”(j jZŒc-type”eh"]”h$]”h&]”uh1jªhjÁubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jZŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j j j# Œlandlock_rules”uh1hh³jµh´KHhj¹ubhŒ’s node keys.”…”�”}”(hj¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jµh´KHhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jµh´KHhj—ubj¹)�”}”(hŒf``LANDLOCK_KEY_NET_PORT`` Type of :c:type:`landlock_rules.root_net_port `'s node keys.”h]”(j¿)�”}”(hŒ``LANDLOCK_KEY_NET_PORT``”h]”j«)�”}”(hjüh]”hŒLANDLOCK_KEY_NET_PORT”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KKhjöubjÙ)�”}”(hhh]”j()�”}”(hŒLType of :c:type:`landlock_rules.root_net_port `'s node keys.”h]”(hŒType of ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ7:c:type:`landlock_rules.root_net_port `”h]”j«)�”}”(hjh]”hŒlandlock_rules.root_net_port”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”(j jZŒc-type”eh"]”h$]”h&]”uh1jªhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jZŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j j j# Œlandlock_rules”uh1hh³jh´KKhjubhŒ’s node keys.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jh´KKhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjöubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jh´KKhj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hj{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´NubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_id (C struct)”Œ c.landlock_id”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒ landlock_id”h]”jã)�”}”(hŒstruct landlock_id”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjth²hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KQubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjth²hh³j…h´KQubj )�”}”(hŒ landlock_id”h]”j)�”}”(hjrh]”hŒ landlock_id”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjth²hh³j…h´KQubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjph²hh³j…h´KQubah}”(h]”jkah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³j…h´KQhjmh²hubj>)�”}”(hhh]”j()�”}”(hŒ$Unique rule identifier for a ruleset”h]”hŒ$Unique rule identifier for a ruleset”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KPhj·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjmh²hh³j…h´KQubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`jÒjajÒjb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hX**Definition**:: struct landlock_id { union landlock_key key; const enum landlock_key_type type; }; **Members** ``key`` Identifies either a kernel object (e.g. an inode) or a raw value (e.g. a TCP port). ``type`` Type of a landlock_ruleset's root tree.”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjÚubhŒ:”…”�”}”(hjÚh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KThjÖubj‹)�”}”(hŒZstruct landlock_id { union landlock_key key; const enum landlock_key_type type; };”h]”hŒZstruct landlock_id { union landlock_key key; const enum landlock_key_type type; };”…”�”}”hj÷sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KVhjÖubj()�”}”(hŒ **Members**”h]”jp)�”}”(hjh]”hŒMembers”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K[hjÖubj´)�”}”(hhh]”(j¹)�”}”(hŒ\``key`` Identifies either a kernel object (e.g. an inode) or a raw value (e.g. a TCP port). ”h]”(j¿)�”}”(hŒ``key``”h]”j«)�”}”(hj'h]”hŒkey”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KVhj!ubjÙ)�”}”(hhh]”j()�”}”(hŒSIdentifies either a kernel object (e.g. an inode) or a raw value (e.g. a TCP port).”h]”hŒSIdentifies either a kernel object (e.g. an inode) or a raw value (e.g. a TCP port).”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KUhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j<h´KVhjubj¹)�”}”(hŒ0``type`` Type of a landlock_ruleset's root tree.”h]”(j¿)�”}”(hŒ``type``”h]”j«)�”}”(hjah]”hŒtype”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KYhj[ubjÙ)�”}”(hhh]”j()�”}”(hŒ'Type of a landlock_ruleset's root tree.”h]”hŒ)Type of a landlock_ruleset’s root tree.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KZhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jvh´KYhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hjÖubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´NubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_rule (C struct)”Œc.landlock_rule”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒ landlock_rule”h]”jã)�”}”(hŒstruct landlock_rule”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj·h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K`ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj·h²hh³jÈh´K`ubj )�”}”(hŒ landlock_rule”h]”j)�”}”(hjµh]”hŒ landlock_rule”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hj·h²hh³jÈh´K`ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hj³h²hh³jÈh´K`ubah}”(h]”j®ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³jÈh´K`hj°h²hubj>)�”}”(hhh]”j()�”}”(hŒAccess rights tied to an object”h]”hŒAccess rights tied to an object”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K_hjúh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj°h²hh³jÈh´K`ubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`jjajjb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hXÃ**Definition**:: struct landlock_rule { struct rb_node node; union landlock_key key; u32 num_layers; struct landlock_layer layers[]; }; **Members** ``node`` Node in the ruleset's red-black tree. ``key`` A union to identify either a kernel object (e.g. an inode) or a raw data value (e.g. a network socket port). This is used as a key for this ruleset element. The pointer is set once and never modified. It always points to an allocated object because each rule increments the refcount of its object. ``num_layers`` Number of entries in **layers**. ``layers`` Stack of layers, from the latest to the newest, implemented as a flexible array member (FAM).”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjubhŒ:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Kchjubj‹)�”}”(hŒ†struct landlock_rule { struct rb_node node; union landlock_key key; u32 num_layers; struct landlock_layer layers[]; };”h]”hŒ†struct landlock_rule { struct rb_node node; union landlock_key key; u32 num_layers; struct landlock_layer layers[]; };”…”�”}”hj:sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Kehjubj()�”}”(hŒ **Members**”h]”jp)�”}”(hjKh]”hŒMembers”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Klhjubj´)�”}”(hhh]”(j¹)�”}”(hŒ/``node`` Node in the ruleset's red-black tree. ”h]”(j¿)�”}”(hŒ``node``”h]”j«)�”}”(hjjh]”hŒnode”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KdhjdubjÙ)�”}”(hhh]”j()�”}”(hŒ%Node in the ruleset's red-black tree.”h]”hŒ'Node in the ruleset’s red-black tree.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jh´Kdhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jh´Kdhjaubj¹)�”}”(hX4``key`` A union to identify either a kernel object (e.g. an inode) or a raw data value (e.g. a network socket port). This is used as a key for this ruleset element. The pointer is set once and never modified. It always points to an allocated object because each rule increments the refcount of its object. ”h]”(j¿)�”}”(hŒ``key``”h]”j«)�”}”(hj£h]”hŒkey”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Klhj�ubjÙ)�”}”(hhh]”j()�”}”(hX+A union to identify either a kernel object (e.g. an inode) or a raw data value (e.g. a network socket port). This is used as a key for this ruleset element. The pointer is set once and never modified. It always points to an allocated object because each rule increments the refcount of its object.”h]”hX+A union to identify either a kernel object (e.g. an inode) or a raw data value (e.g. a network socket port). This is used as a key for this ruleset element. The pointer is set once and never modified. It always points to an allocated object because each rule increments the refcount of its object.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Khhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j¸h´Klhjaubj¹)�”}”(hŒ0``num_layers`` Number of entries in **layers**. ”h]”(j¿)�”}”(hŒ``num_layers``”h]”j«)�”}”(hjÝh]”hŒ num_layers”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Kphj×ubjÙ)�”}”(hhh]”j()�”}”(hŒ Number of entries in **layers**.”h]”(hŒNumber of entries in ”…”�”}”(hjöh²hh³Nh´Nubjp)�”}”(hŒ **layers**”h]”hŒlayers”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjöubhŒ.”…”�”}”(hjöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jòh´Kphjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jòh´Kphjaubj¹)�”}”(hŒh``layers`` Stack of layers, from the latest to the newest, implemented as a flexible array member (FAM).”h]”(j¿)�”}”(hŒ ``layers``”h]”j«)�”}”(hj(h]”hŒlayers”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Kthj"ubjÙ)�”}”(hhh]”j()�”}”(hŒ]Stack of layers, from the latest to the newest, implemented as a flexible array member (FAM).”h]”hŒ]Stack of layers, from the latest to the newest, implemented as a flexible array member (FAM).”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j=h´Kthj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j=h´Kthjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´NubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_rules (C struct)”Œc.landlock_rules”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_rules”h]”jã)�”}”(hŒstruct landlock_rules”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj}h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K{ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj}h²hh³jŽh´K{ubj )�”}”(hŒlandlock_rules”h]”j)�”}”(hj{h]”hŒlandlock_rules”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hj}h²hh³jŽh´K{ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjyh²hh³jŽh´K{ubah}”(h]”jtah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³jŽh´K{hjvh²hubj>)�”}”(hhh]”j()�”}”(hŒ)Red-black tree storage for Landlock rules”h]”hŒ)Red-black tree storage for Landlock rules”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KzhjÀh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjvh²hh³jŽh´K{ubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`jÛjajÛjb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hX\**Definition**:: struct landlock_rules { struct rb_root root_inode; #if IS_ENABLED(CONFIG_INET); struct rb_root root_net_port; #endif ; u32 num_rules; }; **Members** ``root_inode`` Root of a red-black tree containing :c:type:`struct landlock_rule ` nodes with inode object. Immutable for domains. ``root_net_port`` Root of a red-black tree containing :c:type:`struct landlock_rule ` nodes with network port. Immutable for domains. ``num_rules`` Number of non-overlapping (i.e. not for the same object) rules in this tree storage.”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjãubhŒ:”…”�”}”(hjãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K~hjßubj‹)�”}”(hŒ”struct landlock_rules { struct rb_root root_inode; #if IS_ENABLED(CONFIG_INET); struct rb_root root_net_port; #endif ; u32 num_rules; };”h]”hŒ”struct landlock_rules { struct rb_root root_inode; #if IS_ENABLED(CONFIG_INET); struct rb_root root_net_port; #endif ; u32 num_rules; };”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K€hjßubj()�”}”(hŒ **Members**”h]”jp)�”}”(hj h]”hŒMembers”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Kˆhjßubj´)�”}”(hhh]”(j¹)�”}”(hŒ“``root_inode`` Root of a red-black tree containing :c:type:`struct landlock_rule ` nodes with inode object. Immutable for domains. ”h]”(j¿)�”}”(hŒ``root_inode``”h]”j«)�”}”(hj0 h]”hŒ root_inode”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj. ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K‚hj* ubjÙ)�”}”(hhh]”j()�”}”(hŒƒRoot of a red-black tree containing :c:type:`struct landlock_rule ` nodes with inode object. Immutable for domains.”h]”(hŒ$Root of a red-black tree containing ”…”�”}”(hjI h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`struct landlock_rule `”h]”j«)�”}”(hjS h]”hŒstruct landlock_rule”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”(j jZŒc-type”eh"]”h$]”h&]”uh1jªhjQ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jZŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j j j# Œ landlock_rule”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K�hjI ubhŒ1 nodes with inode object. Immutable for domains.”…”�”}”(hjI h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jp h´K�hjF ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj* ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jE h´K‚hj' ubj¹)�”}”(hŒ–``root_net_port`` Root of a red-black tree containing :c:type:`struct landlock_rule ` nodes with network port. Immutable for domains. ”h]”(j¿)�”}”(hŒ``root_net_port``”h]”j«)�”}”(hj� h]”hŒ root_net_port”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj‹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K‰hj‡ ubjÙ)�”}”(hhh]”j()�”}”(hŒƒRoot of a red-black tree containing :c:type:`struct landlock_rule ` nodes with network port. Immutable for domains.”h]”(hŒ$Root of a red-black tree containing ”…”�”}”(hj¦ h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`struct landlock_rule `”h]”j«)�”}”(hj° h]”hŒstruct landlock_rule”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”(j jZŒc-type”eh"]”h$]”h&]”uh1jªhj® ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jZŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j j j# Œ landlock_rule”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Kˆhj¦ ubhŒ1 nodes with network port. Immutable for domains.”…”�”}”(hj¦ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jÍ h´Kˆhj£ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj‡ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j¢ h´K‰hj' ub•j¹)�”}”(hŒb``num_rules`` Number of non-overlapping (i.e. not for the same object) rules in this tree storage.”h]”(j¿)�”}”(hŒ ``num_rules``”h]”j«)�”}”(hjê h]”hŒ num_rules”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjè ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K�hjä ubjÙ)�”}”(hhh]”j()�”}”(hŒTNumber of non-overlapping (i.e. not for the same object) rules in this tree storage.”h]”hŒTNumber of non-overlapping (i.e. not for the same object) rules in this tree storage.”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jÿ h´K�hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjä ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jÿ h´K�hj' ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hjßubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´Nubj()�”}”(hŒ**Description**”h]”jp)�”}”(hj,!h]”hŒ Description”…”�”}”(hj.!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj*!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K“hj§h²hubj()�”}”(hŒHThis structure holds the rule trees shared by both rulesets and domains.”h]”hŒHThis structure holds the rule trees shared by both rulesets and domains.”…”�”}”(hjB!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K{hj§h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_ruleset (C struct)”Œc.landlock_ruleset”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_ruleset”h]”jã)�”}”(hŒstruct landlock_ruleset”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hjj!h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjf!h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K€ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjf!h²hh³jw!h´K€ubj )�”}”(hŒlandlock_ruleset”h]”j)�”}”(hjd!h]”hŒlandlock_ruleset”…”�”}”(hjŠ!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†!ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjf!h²hh³jw!h´K€ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjb!h²hh³jw!h´K€ubah}”(h]”j]!ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³jw!h´K€hj_!h²hubj>)�”}”(hhh]”j()�”}”(hŒLandlock ruleset”h]”hŒLandlock ruleset”…”�”}”(hj¬!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K•hj©!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj_!h²hh³jw!h´K€ubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`jÄ!jajÄ!jb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hXh**Definition**:: struct landlock_ruleset { struct landlock_rules rules; struct mutex lock; refcount_t usage; #ifdef CONFIG_TRACEPOINTS; u64 version; u64 id; #endif ; struct access_masks quiet_masks; struct access_masks handled_masks; }; **Members** ``rules`` Red-black tree storage for rules. ``lock`` Protects against concurrent modifications of **rules**, if **usage** is greater than zero. ``usage`` Number of file descriptors referencing this ruleset. ``version`` Counter incremented on each successful landlock_add_rule(2), including when it only extends an existing rule's access rights. Used by tracepoints to correlate a domain with the exact successful rule history it was created from. Protected by **lock**. ``id`` Unique identifier for this ruleset, used for tracing. ``quiet_masks`` Stores the quiet flags for an unmerged ruleset. For a merged domain, this is stored in each layer's struct landlock_hierarchy instead. ``handled_masks`` Contains the subset of filesystem and network actions that are handled by this ruleset.”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÐ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjÌ!ubhŒ:”…”�”}”(hjÌ!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K™hjÈ!ubj‹)�”}”(hŒ÷struct landlock_ruleset { struct landlock_rules rules; struct mutex lock; refcount_t usage; #ifdef CONFIG_TRACEPOINTS; u64 version; u64 id; #endif ; struct access_masks quiet_masks; struct access_masks handled_masks; };”h]”hŒ÷struct landlock_ruleset { struct landlock_rules rules; struct mutex lock; refcount_t usage; #ifdef CONFIG_TRACEPOINTS; u64 version; u64 id; #endif ; struct access_masks quiet_masks; struct access_masks handled_masks; };”…”�”}”hjé!sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K›hjÈ!ubj()�”}”(hŒ **Members**”h]”jp)�”}”(hjú!h]”hŒMembers”…”�”}”(hjü!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjø!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K§hjÈ!ubj´)�”}”(hhh]”(j¹)�”}”(hŒ,``rules`` Red-black tree storage for rules. ”h]”(j¿)�”}”(hŒ ``rules``”h]”j«)�”}”(hj"h]”hŒrules”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K�hj"ubjÙ)�”}”(hhh]”j()�”}”(hŒ!Red-black tree storage for rules.”h]”hŒ!Red-black tree storage for rules.”…”�”}”(hj2"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j."h´K�hj/"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j."h´K�hj"ubj¹)�”}”(hŒd``lock`` Protects against concurrent modifications of **rules**, if **usage** is greater than zero. ”h]”(j¿)�”}”(hŒ``lock``”h]”j«)�”}”(hjR"h]”hŒlock”…”�”}”(hjT"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjP"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K¢hjL"ubjÙ)�”}”(hhh]”j()�”}”(hŒZProtects against concurrent modifications of **rules**, if **usage** is greater than zero.”h]”(hŒ-Protects against concurrent modifications of ”…”�”}”(hjk"h²hh³Nh´Nubjp)�”}”(hŒ **rules**”h]”hŒrules”…”�”}”(hjs"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjk"ubhŒ, if ”…”�”}”(hjk"h²hh³Nh´Nubjp)�”}”(hŒ **usage**”h]”hŒusage”…”�”}”(hj…"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjk"ubhŒ is greater than zero.”…”�”}”(hjk"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K¡hjh"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjL"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jg"h´K¢hj"ubj¹)�”}”(hŒ?``usage`` Number of file descriptors referencing this ruleset. ”h]”(j¿)�”}”(hŒ ``usage``”h]”j«)�”}”(hj°"h]”hŒusage”…”�”}”(hj²"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj®"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K¦hjª"ubjÙ)�”}”(hhh]”j()�”}”(hŒ4Number of file descriptors referencing this ruleset.”h]”hŒ4Number of file descriptors referencing this ruleset.”…”�”}”(hjÉ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jÅ"h´K¦hjÆ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjª"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jÅ"h´K¦hj"ubj¹)�”}”(hX ``version`` Counter incremented on each successful landlock_add_rule(2), including when it only extends an existing rule's access rights. Used by tracepoints to correlate a domain with the exact successful rule history it was created from. Protected by **lock**. ”h]”(j¿)�”}”(hŒ ``version``”h]”j«)�”}”(hjé"h]”hŒversion”…”�”}”(hjë"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjç"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K°hjã"ubjÙ)�”}”(hhh]”j()�”}”(hŒüCounter incremented on each successful landlock_add_rule(2), including when it only extends an existing rule's access rights. Used by tracepoints to correlate a domain with the exact successful rule history it was created from. Protected by **lock**.”h]”(hŒõCounter incremented on each successful landlock_add_rule(2), including when it only extends an existing rule’s access rights. Used by tracepoints to correlate a domain with the exact successful rule history it was created from. Protected by ”…”�”}”(hj#h²hh³Nh´Nubjp)�”}”(hŒ**lock**”h]”hŒlock”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj#ubhŒ.”…”�”}”(hj#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K¬hjÿ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjã"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jþ"h´K°hj"ubj¹)�”}”(hŒ=``id`` Unique identifier for this ruleset, used for tracing. ”h]”(j¿)�”}”(hŒ``id``”h]”j«)�”}”(hj5#h]”hŒid”…”�”}”(hj7#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj3#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K´hj/#ubjÙ)�”}”(hhh]”j()�”}”(hŒ5Unique identifier for this ruleset, used for tracing.”h]”hŒ5Unique identifier for this ruleset, used for tracing.”…”�”}”(hjN#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jJ#h´K´hjK#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj/#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jJ#h´K´hj"ubj¹)�”}”(hŒ˜``quiet_masks`` Stores the quiet flags for an unmerged ruleset. For a merged domain, this is stored in each layer's struct landlock_hierarchy instead. ”h]”(j¿)�”}”(hŒ``quiet_masks``”h]”j«)�”}”(hjn#h]”hŒ quiet_masks”…”�”}”(hjp#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjl#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K¼hjh#ubjÙ)�”}”(hhh]”j()�”}”(hŒ‡Stores the quiet flags for an unmerged ruleset. For a merged domain, this is stored in each layer's struct landlock_hierarchy instead.”h]”hŒ‰Stores the quiet flags for an unmerged ruleset. For a merged domain, this is stored in each layer’s struct landlock_hierarchy instead.”…”�”}”(hj‡#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´Kºhj„#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjh#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jƒ#h´K¼hj"ubj¹)�”}”(hŒi``handled_masks`` Contains the subset of filesystem and network actions that are handled by this ruleset.”h]”(j¿)�”}”(hŒ``handled_masks``”h]”j«)�”}”(hj¨#h]”hŒ handled_masks”…”�”}”(hjª#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj¦#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KÀhj¢#ubjÙ)�”}”(hhh]”j()�”}”(hŒWContains the subset of filesystem and network actions that are handled by this ruleset.”h]”hŒWContains the subset of filesystem and network actions that are handled by this ruleset.”…”�”}”(hjÁ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j½#h´KÀhj¾#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj¢#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j½#h´KÀhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hjÈ!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´Nubj()�”}”(hŒ**Description**”h]”jp)�”}”(hjê#h]”hŒ Description”…”�”}”(hjì#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjè#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KÄhj§h²hubj()�”}”(hŒ\This data structure must contain unique entries, be updatable, and quick to match an object.”h]”hŒ\This data structure must contain unique entries, be updatable, and quick to match an object.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´K–hj§h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ#landlock_get_rule_root (C function)”Œc.landlock_get_rule_root”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒsstruct rb_root * landlock_get_rule_root (struct landlock_rules *const rules, const enum landlock_key_type key_type)”h]”jã)�”}”(hŒqstruct rb_root *landlock_get_rule_root(struct landlock_rules *const rules, const enum landlock_key_type key_type)”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hj($h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj$$h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KÛubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj$$h²hh³j5$h´KÛubh)�”}”(hhh]”j)�”}”(hŒrb_root”h]”hŒrb_root”…”�”}”(hjG$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjD$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jZŒreftype”jbŒ reftarget”jI$Œmodname”NŒ classname”Nj j )�”}”j! ]”jj)�”}”jbŒlandlock_get_rule_root”sbŒc.landlock_get_rule_root”†”asbuh1hhj$$h²hh³j5$h´KÛubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj$$h²hh³j5$h´KÛubjà)�”}”(hjwh]”hŒ*”…”�”}”(hjv$h²hh³Nh´Nubah}”(h]”h ]”jëah"]”h$]”h&]”uh1jßhj$$h²hh³j5$h´KÛubj )�”}”(hŒlandlock_get_rule_root”h]”j)�”}”(hje$h]”hŒlandlock_get_rule_root”…”�”}”(hj‡$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒ$ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hj$$h²hh³j5$h´KÛubj)�”}”(hŒK(struct landlock_rules *const rules, const enum landlock_key_type key_type)”h]”(j)�”}”(hŒ"struct landlock_rules *const rules”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hj¢$h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjž$ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjž$ubh)�”}”(hhh]”j)�”}”(hŒlandlock_rules”h]”hŒlandlock_rules”…”�”}”(hjÀ$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jZŒreftype”jbŒ reftarget”jÂ$Œmodname”NŒ classname”Nj j )�”}”j! ]”jc$Œc.landlock_get_rule_root”†”asbuh1hhjž$ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjž$ubjà)�”}”(hjwh]”hŒ*”…”�”}”(hjì$h²hh³Nh´Nubah}”(h]”h ]”jëah"]”h$]”h&]”uh1jßhjž$ubjé)�”}”(hj¥h]”hŒconst”…”�”}”(hjù$h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjž$ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjž$ubj)�”}”(hŒrules”h]”hŒrules”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjš$ubj)�”}”(hŒ%const enum landlock_key_type key_type”h]”(jé)�”}”(hj¥h]”hŒconst”…”�”}”(hj-%h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj)%ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj)%ubjé)�”}”(hj÷h]”hŒenum”…”�”}”(hjH%h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj)%ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj)%ubh)�”}”(hhh]”j)�”}”(hŒlandlock_key_type”h]”hŒlandlock_key_type”…”�”}”(hjf%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjc%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jZŒreftype”jbŒ reftarget”jh%Œmodname”NŒ classname”Nj j )�”}”j! ]”jc$Œc.landlock_get_rule_root”†”asbuh1hhj)%ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj)%ubj)�”}”(hŒkey_type”h]”hŒkey_type”…”�”}”(hj’%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjš$ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jhj$$h²hh³j5$h´KÛubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hj $h²hh³j5$h´KÛubah}”(h]”j$ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³j5$h´KÛhj$h²hubj>)�”}”(hhh]”j()�”}”(hŒ'Get the root of a rule tree by key type”h]”hŒ'Get the root of a rule tree by key type”…”�”}”(hj¼%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KÛhj¹%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj$h²hh³j5$h´KÛubeh}”(h]”h ]”(jZŒfunction”eh"]”h$]”h&]”j_jZj`jÔ%jajÔ%jb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hŒ÷**Parameters** ``struct landlock_rules *const rules`` The rules storage to look up. ``const enum landlock_key_type key_type`` The type of key to select the tree for. **Return** A pointer to the rb_root, or ERR_PTR(-EINVAL) on unknown type.”h]”(j()�”}”(hŒ**Parameters**”h]”jp)�”}”(hjÞ%h]”hŒ Parameters”…”�”}”(hjà%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjÜ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KßhjØ%ubj´)�”}”(hhh]”(j¹)�”}”(hŒE``struct landlock_rules *const rules`` The rules storage to look up. ”h]”(j¿)�”}”(hŒ&``struct landlock_rules *const rules``”h]”j«)�”}”(hjý%h]”hŒ"struct landlock_rules *const rules”…”�”}”(hjÿ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjû%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KÝhj÷%ubjÙ)�”}”(hhh]”j()�”}”(hŒThe rules storage to look up.”h]”hŒThe rules storage to look up.”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j&h´KÝhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj÷%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j&h´KÝhjô%ubj¹)�”}”(hŒR``const enum landlock_key_type key_type`` The type of key to select the tree for. ”h]”(j¿)�”}”(hŒ)``const enum landlock_key_type key_type``”h]”j«)�”}”(hj6&h]”hŒ%const enum landlock_key_type key_type”…”�”}”(hj8&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj4&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KÞhj0&ubjÙ)�”}”(hhh]”j()�”}”(hŒ'The type of key to select the tree for.”h]”hŒ'The type of key to select the tree for.”…”�”}”(hjO&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jK&h´KÞhjL&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj0&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jK&h´KÞhjô%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hjØ%ubj()�”}”(hŒ **Return**”h]”jp)�”}”(hjq&h]”hŒReturn”…”�”}”(hjs&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjo&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KàhjØ%ubj()�”}”(hŒ>A pointer to the rb_root, or ERR_PTR(-EINVAL) on unknown type.”h]”hŒ>A pointer to the rb_root, or ERR_PTR(-EINVAL) on unknown type.”…”�”}”(hj‡&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ^/var/lib/git/docbuild/linux/Documentation/security/landlock:175: ./security/landlock/ruleset.h”h´KàhjØ%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´NubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_details (C struct)”Œc.landlock_details”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_details”h]”jã)�”}”(hŒstruct landlock_details”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hj¶&h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhj²&h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj²&h²hh³jÃ&h´Kubj )�”}”(hŒlandlock_details”h]”j)�”}”(hj°&h]”hŒlandlock_details”…”�”}”(hjÖ&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒ&ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hj²&h²hh³jÃ&h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hj®&h²hh³jÃ&h´Kubah}”(h]”j©&ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³jÃ&h´Khj«&h²hubj>)�”}”(hhh]”j()�”}”(hŒDomain's creation information”h]”hŒDomain’s creation information”…”�”}”(hjø&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K1hjõ&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj«&h²hh³jÃ&h´Kubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`j'jaj'jb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hX¹**Definition**:: struct landlock_details { struct pid *pid; uid_t uid; char comm[TASK_COMM_LEN]; char exe_path[]; }; **Members** ``pid`` PID of the task that initially restricted itself. It still identifies the same task. Keeping a reference to this PID ensures that it will not be recycled. ``uid`` UID of the task that initially restricted itself, at creation time. ``comm`` Command line of the task that initially restricted itself, at creation time. Always NULL terminated. ``exe_path`` Executable path of the task that initially restricted itself, at creation time. Always NULL terminated, and never greater than LANDLOCK_PATH_MAX_SIZE.”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj'ubhŒ:”…”�”}”(hj'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K5hj'ubj‹)�”}”(hŒsstruct landlock_details { struct pid *pid; uid_t uid; char comm[TASK_COMM_LEN]; char exe_path[]; };”h]”hŒsstruct landlock_details { struct pid *pid; uid_t uid; char comm[TASK_COMM_LEN]; char exe_path[]; };”…”�”}”hj5'sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K7hj'ubj()�”}”(hŒ **Members**”h]”jp)�”}”(hjF'h]”hŒMembers”…”�”}”(hjH'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjD'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K>hj'ubj´)�”}”(hhh]”(j¹)�”}”(hŒ¥``pid`` PID of the task that initially restricted itself. It still identifies the same task. Keeping a reference to this PID ensures that it will not be recycled. ”h]”(j¿)�”}”(hŒ``pid``”h]”j«)�”}”(hje'h]”hŒpid”…”�”}”(hjg'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjc'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K=hj_'ubjÙ)�”}”(hhh]”j()�”}”(hŒœPID of the task that initially restricted itself. It still identifies the same task. Keeping a reference to this PID ensures that it will not be recycled.”h]”hŒœPID of the task that initially restricted itself. It still identifies the same task. Keeping a reference to this PID ensures that it will not be recycled.”…”�”}”(hj~'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K;hj{'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj_'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jz'h´K=hj\'ubj¹)�”}”(hŒL``uid`` UID of the task that initially restricted itself, at creation time. ”h]”(j¿)�”}”(hŒ``uid``”h]”j«)�”}”(hjŸ'h]”hŒuid”…”�”}”(hj¡'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj�'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KAhj™'ubjÙ)�”}”(hhh]”j()�”}”(hŒCUID of the task that initially restricted itself, at creation time.”h]”hŒCUID of the task that initially restricted itself, at creation time.”…”�”}”(hj¸'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j´'h´KAhjµ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj™'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j´'h´KAhj\'ubj¹)�”}”(hŒo``comm`` Command line of the task that initially restricted itself, at creation time. Always NULL terminated. ”h]”(j¿)�”}”(hŒ``comm``”h]”j«)�”}”(hjØ'h]”hŒcomm”…”�”}”(hjÚ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÖ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KFhjÒ'ubjÙ)�”}”(hhh]”j()�”}”(hŒeCommand line of the task that initially restricted itself, at creation time. Always NULL terminated.”h]”hŒeCommand line of the task that initially restricted itself, at creation time. Always NULL terminated.”…”�”}”(hjñ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KEhjî'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjÒ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jí'h´KFhj\'ubj¹)�”}”(hŒ¤``exe_path`` Executable path of the task that initially restricted itself, at creation time. Always NULL terminated, and never greater than LANDLOCK_PATH_MAX_SIZE.”h]”(j¿)�”}”(hŒ ``exe_path``”h]”j«)�”}”(hj(h]”hŒexe_path”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KKhj (ubjÙ)�”}”(hhh]”j()�”}”(hŒ—Executable path of the task that initially restricted itself, at creation time. Always NULL terminated, and never greater than LANDLOCK_PATH_MAX_SIZE.”h]”hŒ—Executable path of the task that initially restricted itself, at creation time. Always NULL terminated, and never greater than LANDLOCK_PATH_MAX_SIZE.”…”�”}”(hj+(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KJhj((ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj (ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j'(h´KKhj\'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hj'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´Nubj()�”}”(hŒ**Description**”h]”jp)�”}”(hjU(h]”hŒ Description”…”�”}”(hjW(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjS(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KOhj§h²hubj()�”}”(hŒ?Rarely accessed, mainly when logging the first domain's denial.”h]”hŒARarely accessed, mainly when logging the first domain’s denial.”…”�”}”(hjk(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K2hj§h²hubj()�”}”(hŒ[The contained pointers are initialized at the domain creation time and never changed again.”h]”hŒ[The contained pointers are initialized at the domain creation time and never changed again.”…”�”}”(hjz(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K4hj§h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_hierarchy (C struct)”Œc.landlock_hierarchy”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_hierarchy”h]”jã)�”}”(hŒstruct landlock_hierarchy”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hj¢(h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjž(h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K:ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjž(h²hh³j¯(h´K:ubj )�”}”(hŒlandlock_hierarchy”h]”j)�”}”(hjœ(h]”hŒlandlock_hierarchy”…”�”}”(hjÂ(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾(ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjž(h²hh³j¯(h´K:ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjš(h²hh³j¯(h´K:ubah}”(h]”j•(ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³j¯(h´K:hj—(h²hubj>)�”}”(hhh]”j()�”}”(hŒNode in a domain hierarchy”h]”hŒNode in a domain hierarchy”…”�”}”(hjä(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KXhjá(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj—(h²hh³j¯(h´K:ubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`jü(jajü(jb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hXt**Definition**:: struct landlock_hierarchy { struct landlock_hierarchy *parent; refcount_t usage; #ifdef CONFIG_SECURITY_LANDLOCK_LOG; enum landlock_log_status log_status; atomic64_t num_denials; u64 id; const struct landlock_details *details; u32 log_same_exec : 1, log_new_exec : 1; struct access_masks quiet_masks; #endif ; }; **Members** ``parent`` Pointer to the parent node, or NULL if it is a root Landlock domain. ``usage`` Number of potential children domains plus their parent domain. ``log_status`` Whether this domain should be logged or not. Because concurrent log entries may be created at the same time, it is still possible to have several domain records of the same domain. ``num_denials`` Number of access requests denied by this domain. Masked (i.e. never logged) denials are still counted. ``id`` Landlock domain ID, set once at domain creation time. ``details`` Information about the related domain. ``log_same_exec`` Set if the domain is *not* configured with ``LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF``. Set to true by default. ``log_new_exec`` Set if the domain is configured with ``LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON``. Set to false by default. ``quiet_masks`` Bitmasks of access that should be quieted (i.e. not logged) if the related object is marked as quiet.”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj)ubhŒ:”…”�”}”(hj)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K\hj)ubj‹)�”}”(hXXstruct landlock_hierarchy { struct landlock_hierarchy *parent; refcount_t usage; #ifdef CONFIG_SECURITY_LANDLOCK_LOG; enum landlock_log_status log_status; atomic64_t num_denials; u64 id; const struct landlock_details *details; u32 log_same_exec : 1, log_new_exec : 1; struct access_masks quiet_masks; #endif ; };”h]”hXXstruct landlock_hierarchy { struct landlock_hierarchy *parent; refcount_t usage; #ifdef CONFIG_SECURITY_LANDLOCK_LOG; enum landlock_log_status log_status; atomic64_t num_denials; u64 id; const struct landlock_details *details; u32 log_same_exec : 1, log_new_exec : 1; struct access_masks quiet_masks; #endif ; };”…”�”}”hj!)sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K^hj)ubj()�”}”(hŒ **Members**”h]”jp)�”}”(hj2)h]”hŒMembers”…”�”}”(hj4)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj0)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kkhj)ubj´)�”}”(hhh]”(j¹)�”}”(hŒP``parent`` Pointer to the parent node, or NULL if it is a root Landlock domain. ”h]”(j¿)�”}”(hŒ ``parent``”h]”j«)�”}”(hjQ)h]”hŒparent”…”�”}”(hjS)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjO)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K^hjK)ubjÙ)�”}”(hhh]”j()�”}”(hŒDPointer to the parent node, or NULL if it is a root Landlock domain.”h]”hŒDPointer to the parent node, or NULL if it is a root Landlock domain.”…”�”}”(hjj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K]hjg)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjK)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jf)h´K^hjH)ubj¹)�”}”(hŒI``usage`` Number of potential children domains plus their parent domain. ”h]”(j¿)�”}”(hŒ ``usage``”h]”j«)�”}”(hj‹)h]”hŒusage”…”�”}”(hj�)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj‰)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kchj…)ubjÙ)�”}”(hhh]”j()�”}”(hŒ>Number of potential children domains plus their parent domain.”h]”hŒ>Number of potential children domains plus their parent domain.”…”�”}”(hj¤)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kbhj¡)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj…)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j )h´KchjH)ubj¹)�”}”(hŒÅ``log_status`` Whether this domain should be logged or not. Because concurrent log entries may be created at the same time, it is still possible to have several domain records of the same domain. ”h]”(j¿)�”}”(hŒ``log_status``”h]”j«)�”}”(hjÅ)h]”hŒ log_status”…”�”}”(hjÇ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÃ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kkhj¿)ubjÙ)�”}”(hhh]”j()�”}”(hŒµWhether this domain should be logged or not. Because concurrent log entries may be created at the same time, it is still possible to have several domain records of the same domain.”h]”hŒµWhether this domain should be logged or not. Because concurrent log entries may be created at the same time, it is still possible to have several domain records of the same domain.”…”�”}”(hjÞ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KihjÛ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj¿)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jÚ)h´KkhjH)ubj¹)�”}”(hŒw``num_denials`` Number of access requests denied by this domain. Masked (i.e. never logged) denials are still counted. ”h]”(j¿)�”}”(hŒ``num_denials``”h]”j«)�”}”(hjÿ)h]”hŒ num_denials”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjý)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kphjù)ubjÙ)�”}”(hhh]”j()�”}”(hŒfNumber of access requests denied by this domain. Masked (i.e. never logged) denials are still counted.”h]”hŒfNumber of access requests denied by this domain. Masked (i.e. never logged) denials are still counted.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kohj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjù)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j*h´KphjH)ubj¹)�”}”(hŒ=``id`` Landlock domain ID, set once at domain creation time. ”h]”(j¿)�”}”(hŒ``id``”h]”j«)�”}”(hj9*h]”hŒid”…”�”}”(hj;*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj7*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kthj3*ubjÙ)�”}”(hhh]”j()�”}”(hŒ5Landlock domain ID, set once at domain creation time.”h]”hŒ5Landlock domain ID, set once at domain creation time.”…”�”}”(hjR*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jN*h´KthjO*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj3*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jN*h´KthjH)ubj¹)�”}”(hŒ2``details`` Information about the related domain. ”h]”(j¿)�”}”(hŒ ``details``”h]”j«)�”}”(hjr*h]”hŒdetails”…”�”}”(hjt*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjp*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kxhjl*ubjÙ)�”}”(hhh]”j()�”}”(hŒ%Information about the related domain.”h]”hŒ%Information about the related domain.”…”�”}”(hj‹*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j‡*h´Kxhjˆ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjl*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j‡*h´KxhjH)ubj¹)�”}”(hŒ„``log_same_exec`` Set if the domain is *not* configured with ``LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF``. Set to true by default. ”h]”(j¿)�”}”(hŒ``log_same_exec``”h]”j«)�”}”(hj«*h]”hŒ log_same_exec”…”�”}”(hj­*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj©*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K}hj¥*ubjÙ)�”}”(hhh]”j()�”}”(hŒqSet if the domain is *not* configured with ``LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF``. Set to true by default.”h]”(hŒSet if the domain is ”…”�”}”(hjÄ*h²hh³Nh´Nubjß)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hjÌ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÄ*ubhŒ configured with ”…”�”}”(hjÄ*h²hh³Nh´Nubj«)�”}”(hŒ,``LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF``”h]”hŒ(LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF”…”�”}”(hjÞ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÄ*ubhŒ. Set to true by default.”…”�”}”(hjÄ*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K|hjÁ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj¥*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jÀ*h´K}hjH)ubj¹)�”}”(hŒ|``log_new_exec`` Set if the domain is configured with ``LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON``. Set to false by default. ”h]”(j¿)�”}”(hŒ``log_new_exec``”h]”j«)�”}”(hj +h]”hŒ log_new_exec”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K‚hj+ubjÙ)�”}”(hhh]”j()�”}”(hŒjSet if the domain is configured with ``LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON``. Set to false by default.”h]”(hŒ%Set if the domain is configured with ”…”�”}”(hj"+h²hh³Nh´Nubj«)�”}”(hŒ*``LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON``”h]”hŒ&LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON”…”�”}”(hj*+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj"+ubhŒ. Set to false by default.”…”�”}”(hj"+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K�hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j+h´K‚hjH)ubj¹)�”}”(hŒu``quiet_masks`` Bitmasks of access that should be quieted (i.e. not logged) if the related object is marked as quiet.”h]”(j¿)�”}”(hŒ``quiet_masks``”h]”j«)�”}”(hjU+h]”hŒ quiet_masks”…”�”}”(hjW+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjS+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K†hjO+ubjÙ)�”}”(hhh]”j()�”}”(hŒeBitmasks of access that should be quieted (i.e. not logged) if the related object is marked as quiet.”h]”hŒeBitmasks of access that should be quieted (i.e. not logged) if the related object is marked as quiet.”…”�”}”(hjn+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jj+h´K†hjk+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjO+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jj+h´K†hjH)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hj)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´NubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒlandlock_domain (C struct)”Œc.landlock_domain”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒlandlock_domain”h]”jã)�”}”(hŒstruct landlock_domain”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hj®+h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjª+h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K�ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjª+h²hh³j»+h´K�ubj )�”}”(hŒlandlock_domain”h]”j)�”}”(hj¨+h]”hŒlandlock_domain”…”�”}”(hjÎ+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊ+ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjª+h²hh³j»+h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hj¦+h²hh³j»+h´K�ubah}”(h]”j¡+ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³j»+h´K�hj£+h²hubj>)�”}”(hhh]”j()�”}”(hŒImmutable Landlock domain”h]”hŒImmutable Landlock domain”…”�”}”(hjð+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KÆhjí+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj£+h²hh³j»+h´K�ubeh}”(h]”h ]”(jZŒstruct”eh"]”h$]”h&]”j_jZj`j,jaj,jb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hX×**Definition**:: struct landlock_domain { struct landlock_rules rules; struct landlock_hierarchy *hierarchy; union { struct work_struct work_free; struct { refcount_t usage; u32 num_layers; struct access_masks handled_masks[]; }; }; }; **Members** ``rules`` Red-black tree storage for rules. ``hierarchy`` Enables hierarchy identification even when a parent domain vanishes. This is needed for the ptrace and scope restrictions. ``{unnamed_union}`` anonymous ``work_free`` Enables to free a domain within a lockless section. This is only used by landlock_put_domain_deferred() when **usage** reaches zero. The fields **usage**, **num_layers** and **handled_masks** are then unused. ``{unnamed_struct}`` anonymous ``usage`` Number of credentials referencing this domain. ``num_layers`` Number of layers that are used in this domain. This enables to check that all the layers allow an access request. ``handled_masks`` Contains the subset of filesystem and network actions that are restricted by a domain. A domain saves all layers of merged rulesets in a stack (FAM), starting from the first layer to the last one. These layers are used when merging rulesets, for user space backward compatibility (i.e. future-proof), and to properly handle merged rulesets without overlapping access rights. These layers are set once and never changed for the lifetime of the domain. Not annotated with __counted_by(num_layers): clang miscomputes the counter address for a FAM nested in an anonymous struct within a union, which trips FORTIFY: https://github.com/llvm/llvm-project/pull/228309”h]”(j()�”}”(hŒ**Definition**::”h]”(jp)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj,ubhŒ:”…”�”}”(hj,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KÊhj ,ubj‹)�”}”(hX&struct landlock_domain { struct landlock_rules rules; struct landlock_hierarchy *hierarchy; union { struct work_struct work_free; struct { refcount_t usage; u32 num_layers; struct access_masks handled_masks[]; }; }; };”h]”hX&struct landlock_domain { struct landlock_rules rules; struct landlock_hierarchy *hierarchy; union { struct work_struct work_free; struct { refcount_t usage; u32 num_layers; struct access_masks handled_masks[]; }; }; };”…”�”}”hj-,sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŠh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KÌhj ,ubj()�”}”(hŒ **Members**”h]”jp)�”}”(hj>,h]”hŒMembers”…”�”}”(hj@,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj<,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KÙhj ,ubj´)�”}”(hhh]”(j¹)�”}”(hŒ,``rules`` Red-black tree storage for rules. ”h]”(j¿)�”}”(hŒ ``rules``”h]”j«)�”}”(hj],h]”hŒrules”…”�”}”(hj_,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj[,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KÏhjW,ubjÙ)�”}”(hhh]”j()�”}”(hŒ!Red-black tree storage for rules.”h]”hŒ!Red-black tree storage for rules.”…”�”}”(hjv,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jr,h´KÏhjs,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjW,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jr,h´KÏhjT,ubj¹)�”}”(hŒŠ``hierarchy`` Enables hierarchy identification even when a parent domain vanishes. This is needed for the ptrace and scope restrictions. ”h]”(j¿)�”}”(hŒ ``hierarchy``”h]”j«)�”}”(hj–,h]”hŒ hierarchy”…”�”}”(hj˜,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj”,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KÕhj�,ubjÙ)�”}”(hhh]”j()�”}”(hŒ{Enables hierarchy identification even when a parent domain vanishes. This is needed for the ptrace and scope restrictions.”h]”hŒ{Enables hierarchy identification even when a parent domain vanishes. This is needed for the ptrace and scope restrictions.”…”�”}”(hj¯,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KÓhj¬,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj�,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j«,h´KÕhjT,ubj¹)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¿)�”}”(hŒ``{unnamed_union}``”h]”j«)�”}”(hjÐ,h]”hŒ{unnamed_union}”…”�”}”(hjÒ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÎ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KhjÊ,ubjÙ)�”}”(hhh]”j()�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjé,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jå,h´Khjæ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjÊ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jå,h´KhjT,ubj¹)�”}”(hŒá``work_free`` Enables to free a domain within a lockless section. This is only used by landlock_put_domain_deferred() when **usage** reaches zero. The fields **usage**, **num_layers** and **handled_masks** are then unused. ”h]”(j¿)�”}”(hŒ ``work_free``”h]”j«)�”}”(hj -h]”hŒ work_free”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KÝhj-ubjÙ)�”}”(hhh]”j()�”}”(hŒÒEnables to free a domain within a lockless section. This is only used by landlock_put_domain_deferred() when **usage** reaches zero. The fields **usage**, **num_layers** and **handled_masks** are then unused.”h]”(hŒnEnables to free a domain within a lockless section. This is only used by landlock_put_domain_deferred() when ”…”�”}”(hj"-h²hh³Nh´Nubjp)�”}”(hŒ **usage**”h]”hŒusage”…”�”}”(hj*-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj"-ubhŒ reaches zero. The fields ”…”�”}”(hj"-h²hh³Nh´Nubjp)�”}”(hŒ **usage**”h]”hŒusage”…”�”}”(hj<-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj"-ubhŒ, ”…”�”}”(hj"-h²hh³Nh´Nubjp)�”}”(hŒ**num_layers**”h]”hŒ num_layers”…”�”}”(hjN-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj"-ubhŒ and ”…”�”}”(hj"-h²hh³Nh´Nubjp)�”}”(hŒ**handled_masks**”h]”hŒ handled_masks”…”�”}”(hj`-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj"-ubhŒ are then unused.”…”�”}”(hj"-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KÚhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j-h´KÝhjT,ubj¹)�”}”(hŒ``{unnamed_struct}`` anonymous ”h]”(j¿)�”}”(hŒ``{unnamed_struct}``”h]”j«)�”}”(hj‹-h]”hŒ{unnamed_struct}”…”�”}”(hj�-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj‰-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Khj…-ubjÙ)�”}”(hhh]”j()�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hj¤-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³j -h´Khj¡-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj…-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j -h´KhjT,ubj¹)�”}”(hŒ9``usage`` Number of credentials referencing this domain. ”h]”(j¿)�”}”(hŒ ``usage``”h]”j«)�”}”(hjÄ-h]”hŒusage”…”�”}”(hjÆ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjÂ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kãhj¾-ubjÙ)�”}”(hhh]”j()�”}”(hŒ.Number of credentials referencing this domain.”h]”hŒ.Number of credentials referencing this domain.”…”�”}”(hjÝ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KâhjÚ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj¾-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jÙ-h´KãhjT,ubj¹)�”}”(hŒ‚``num_layers`` Number of layers that are used in this domain. This enables to check that all the layers allow an access request. ”h]”(j¿)�”}”(hŒ``num_layers``”h]”j«)�”}”(hjþ-h]”hŒ num_layers”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjü-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kéhjø-ubjÙ)�”}”(hhh]”j()�”}”(hŒrNumber of layers that are used in this domain. This enables to check that all the layers allow an access request.”h]”hŒrNumber of layers that are used in this domain. This enables to check that all the layers allow an access request.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kçhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjø-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³j.h´KéhjT,ubj¹)�”}”(hX¨``handled_masks`` Contains the subset of filesystem and network actions that are restricted by a domain. A domain saves all layers of merged rulesets in a stack (FAM), starting from the first layer to the last one. These layers are used when merging rulesets, for user space backward compatibility (i.e. future-proof), and to properly handle merged rulesets without overlapping access rights. These layers are set once and never changed for the lifetime of the domain. Not annotated with __counted_by(num_layers): clang miscomputes the counter address for a FAM nested in an anonymous struct within a union, which trips FORTIFY: https://github.com/llvm/llvm-project/pull/228309”h]”(j¿)�”}”(hŒ``handled_masks``”h]”j«)�”}”(hj8.h]”hŒ handled_masks”…”�”}”(hj:.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj6.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kúhj2.ubjÙ)�”}”(hhh]”(j()�”}”(hXÄContains the subset of filesystem and network actions that are restricted by a domain. A domain saves all layers of merged rulesets in a stack (FAM), starting from the first layer to the last one. These layers are used when merging rulesets, for user space backward compatibility (i.e. future-proof), and to properly handle merged rulesets without overlapping access rights. These layers are set once and never changed for the lifetime of the domain.”h]”hXÄContains the subset of filesystem and network actions that are restricted by a domain. A domain saves all layers of merged rulesets in a stack (FAM), starting from the first layer to the last one. These layers are used when merging rulesets, for user space backward compatibility (i.e. future-proof), and to properly handle merged rulesets without overlapping access rights. These layers are set once and never changed for the lifetime of the domain.”…”�”}”(hjQ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KíhjN.ubj()�”}”(hŒÐNot annotated with __counted_by(num_layers): clang miscomputes the counter address for a FAM nested in an anonymous struct within a union, which trips FORTIFY: https://github.com/llvm/llvm-project/pull/228309”h]”(hŒ Not annotated with __counted_by(num_layers): clang miscomputes the counter address for a FAM nested in an anonymous struct within a union, which trips FORTIFY: ”…”�”}”(hj`.h²hh³Nh´Nubj4)�”}”(hŒ0https://github.com/llvm/llvm-project/pull/228309”h]”hŒ0https://github.com/llvm/llvm-project/pull/228309”…”�”}”(hjh.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jj.uh1j3hj`.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´K÷hjN.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØhj2.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jM.h´KúhjT,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³hj ,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´Nubj()�”}”(hŒ**Description**”h]”jp)�”}”(hj™.h]”hŒ Description”…”�”}”(hj›.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj—.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Kþhj§h²hubj()�”}”(hŒéA domain is created from a ruleset by landlock_merge_ruleset() and enforced on a task. Once created, its rules and access masks are immutable. Unlike :c:type:`struct landlock_ruleset `, a domain has no lock field.”h]”(hŒ˜A domain is created from a ruleset by landlock_merge_ruleset() and enforced on a task. Once created, its rules and access masks are immutable. Unlike ”…”�”}”(hj¯.h²hh³Nh´Nubh)�”}”(hŒ4:c:type:`struct landlock_ruleset `”h]”j«)�”}”(hj¹.h]”hŒstruct landlock_ruleset”…”�”}”(hj».h²hh³Nh´Nubah}”(h]”h ]”(j jZŒc-type”eh"]”h$]”h&]”uh1jªhj·.ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jZŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j j j# Œlandlock_ruleset”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´KÇhj¯.ubhŒ, a domain has no lock field.”…”�”}”(hj¯.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jÖ.h´KÇhj§h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ(landlock_union_access_masks (C function)”Œc.landlock_union_access_masks”hNt”auh1jÅhj§h²hh³Nh´NubjØ)�”}”(hhh]”(jÝ)�”}”(hŒ\struct access_masks landlock_union_access_masks (const struct landlock_domain *const domain)”h]”jã)�”}”(hŒ[struct access_masks landlock_union_access_masks(const struct landlock_domain *const domain)”h]”(jé)�”}”(hjìh]”hŒstruct”…”�”}”(hjú.h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjö.h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Mubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjö.h²hh³j/h´Mubh)�”}”(hhh]”j)�”}”(hŒ access_masks”h]”hŒ access_masks”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jZŒreftype”jbŒ reftarget”j/Œmodname”NŒ classname”Nj j )�”}”j! ]”jj)�”}”jbŒlandlock_union_access_masks”sbŒc.landlock_union_access_masks”†”asbuh1hhjö.h²hh³j/h´Mubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjö.h²hh³j/h´Mubj )�”}”(hŒlandlock_union_access_masks”h]”j)�”}”(hj7/h]”hŒlandlock_union_access_masks”…”�”}”(hjL/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH/ubah}”(h]”h ]”(j$j%eh"]”h$]”h&]”hÅhÆuh1j hjö.h²hh³j/h´Mubj)�”}”(hŒ,(const struct landlock_domain *const domain)”h]”j)�”}”(hŒ*const struct landlock_domain *const domain”h]”(jé)�”}”(hj¥h]”hŒconst”…”�”}”(hjg/h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjc/ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjc/ubjé)�”}”(hjìh]”hŒstruct”…”�”}”(hj‚/h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjc/ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjc/ubh)�”}”(hhh]”j)�”}”(hŒlandlock_domain”h]”hŒlandlock_domain”…”�”}”(hj /h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jZŒreftype”jbŒ reftarget”j¢/Œmodname”NŒ classname”Nj j )�”}”j! ]”j5/Œc.landlock_union_access_masks”†”asbuh1hhjc/ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjc/ubjà)�”}”(hjwh]”hŒ*”…”�”}”(hjÌ/h²hh³Nh´Nubah}”(h]”h ]”jëah"]”h$]”h&]”uh1jßhjc/ubjé)�”}”(hj¥h]”hŒconst”…”�”}”(hjÙ/h²hh³Nh´Nubah}”(h]”h ]”jõah"]”h$]”h&]”uh1jèhjc/ubjû)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjc/ubj)�”}”(hŒdomain”h]”hŒdomain”…”�”}”(hjô/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjc/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj_/ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jhjö.h²hh³j/h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj/ˆuh1jâj0j1hjò.h²hh³j/h´Mubah}”(h]”jí.ah ]”(j5j6eh"]”h$]”h&]”j:ˆj;)j<huh1jÜh³j/h´Mhjï.h²hubj>)�”}”(hhh]”j()�”}”(hŒ.Return all access rights handled in the domain”h]”hŒ.Return all access rights handled in the domain”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Mhj0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjï.h²hh³j/h´Mubeh}”(h]”h ]”(jZŒfunction”eh"]”h$]”h&]”j_jZj`j60jaj60jb‰jc‰jd‰uh1j×h²hhj§h³Nh´Nubjf)�”}”(hŒ **Parameters** ``const struct landlock_domain *const domain`` Landlock domain **Return** An access_masks result of the OR of all the domain's access masks.”h]”(j()�”}”(hŒ**Parameters**”h]”jp)�”}”(hj@0h]”hŒ Parameters”…”�”}”(hjB0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj>0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Mhj:0ubj´)�”}”(hhh]”j¹)�”}”(hŒ?``const struct landlock_domain *const domain`` Landlock domain ”h]”(j¿)�”}”(hŒ.``const struct landlock_domain *const domain``”h]”j«)�”}”(hj_0h]”hŒ*const struct landlock_domain *const domain”…”�”}”(hja0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj]0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´MhjY0ubjÙ)�”}”(hhh]”j()�”}”(hŒLandlock domain”h]”hŒLandlock domain”…”�”}”(hjx0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³jt0h´Mhju0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjY0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸h³jt0h´MhjV0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³hj:0ubj()�”}”(hŒ **Return**”h]”jp)�”}”(hjš0h]”hŒReturn”…”�”}”(hjœ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johj˜0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Mhj:0ubj()�”}”(hŒBAn access_masks result of the OR of all the domain's access masks.”h]”hŒDAn access_masks result of the OR of all the domain’s access masks.”…”�”}”(hj°0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œ]/var/lib/git/docbuild/linux/Documentation/security/landlock:178: ./security/landlock/domain.h”h´Mhj:0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jehj§h²hh³Nh´Nubeh}”(h]”Œruleset-and-domain”ah ]”h"]”Œruleset and domain”ah$]”h&]”uh1hòhj£h²hh³hÇh´K¡ubeh}”(h]”Œkernel-structures”ah ]”h"]”Œkernel structures”ah$]”h&]”uh1hòhhôh²hh³hÇh´KŒubhó)�”}”(hhh]”(hø)�”}”(hŒDenial logging”h]”hŒDenial logging”…”�”}”(hjÙ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hjÖ0h²hh³hÇh´K¶ubj()�”}”(hXAccess denials are logged through two independent channels: audit records and tracepoints. Both are managed by the common denial framework in ``log.c``, compiled under ``CONFIG_SECURITY_LANDLOCK_LOG`` (automatically selected by ``CONFIG_AUDIT`` or ``CONFIG_TRACEPOINTS``).”h]”(hŒ�Access denials are logged through two independent channels: audit records and tracepoints. Both are managed by the common denial framework in ”…”�”}”(hjç0h²hh³Nh´Nubj«)�”}”(hŒ ``log.c``”h]”hŒlog.c”…”�”}”(hjï0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjç0ubhŒ, compiled under ”…”�”}”(hjç0h²hh³Nh´Nubj«)�”}”(hŒ ``CONFIG_SECURITY_LANDLOCK_LOG``”h]”hŒCONFIG_SECURITY_LANDLOCK_LOG”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjç0ubhŒ (automatically selected by ”…”�”}”(hjç0h²hh³Nh´Nubj«)�”}”(hŒ``CONFIG_AUDIT``”h]”hŒ CONFIG_AUDIT”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjç0ubhŒ or ”…”�”}”(hjç0h²hh³Nh´Nubj«)�”}”(hŒ``CONFIG_TRACEPOINTS``”h]”hŒCONFIG_TRACEPOINTS”…”�”}”(hj%1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjç0ubhŒ).”…”�”}”(hjç0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K¸hjÖ0h²hubj()�”}”(hX Audit records respect audit configuration, the domain's Landlock log flags, and ``LANDLOCK_LOG_DISABLED``. Tracepoints fire unconditionally, independent of these settings. The denial counter (``num_denials``) is always incremented regardless of logging configuration.”h]”(hŒRAudit records respect audit configuration, the domain’s Landlock log flags, and ”…”�”}”(hj=1h²hh³Nh´Nubj«)�”}”(hŒ``LANDLOCK_LOG_DISABLED``”h]”hŒLANDLOCK_LOG_DISABLED”…”�”}”(hjE1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj=1ubhŒY. Tracepoints fire unconditionally, independent of these settings. The denial counter (”…”�”}”(hj=1h²hh³Nh´Nubj«)�”}”(hŒ``num_denials``”h]”hŒ num_denials”…”�”}”(hjW1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhj=1ubhŒ<) is always incremented regardless of logging configuration.”…”�”}”(hj=1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´K½hjÖ0h²hubj()�”}”(hXøEach denial tracepoint carries a ``logged`` field reporting the audit-logging verdict: whether the denial would be written to the audit log if audit were configured and active. This verdict is the same whether or not the kernel is built with audit support, so a tracepoints-only build reports the selection audit would make. A quiet rule (``LANDLOCK_ADD_RULE_QUIET`` with the access in the ``quiet_*`` fields of ``struct landlock_ruleset_attr``) suppresses logging by setting ``logged=0`` the same way.”h]”(hŒ!Each denial tracepoint carries a ”…”�”}”(hjo1h²hh³Nh´Nubj«)�”}”(hŒ ``logged``”h]”hŒlogged”…”�”}”(hjw1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjo1ubhX* field reporting the audit-logging verdict: whether the denial would be written to the audit log if audit were configured and active. This verdict is the same whether or not the kernel is built with audit support, so a tracepoints-only build reports the selection audit would make. A quiet rule (”…”�”}”(hjo1h²hh³Nh´Nubj«)�”}”(hŒ``LANDLOCK_ADD_RULE_QUIET``”h]”hŒLANDLOCK_ADD_RULE_QUIET”…”�”}”(hj‰1h²h• h³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjo1ubhŒ with the access in the ”…”�”}”(hjo1h²hh³Nh´Nubj«)�”}”(hŒ ``quiet_*``”h]”hŒquiet_*”…”�”}”(hj›1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjo1ubhŒ fields of ”…”�”}”(hjo1h²hh³Nh´Nubj«)�”}”(hŒ ``struct landlock_ruleset_attr``”h]”hŒstruct landlock_ruleset_attr”…”�”}”(hj­1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjo1ubhŒ ) suppresses logging by setting ”…”�”}”(hjo1h²hh³Nh´Nubj«)�”}”(hŒ ``logged=0``”h]”hŒlogged=0”…”�”}”(hj¿1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jªhjo1ubhŒ the same way.”…”�”}”(hjo1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´KÂhjÖ0h²hubj()�”}”(hŒqSee Documentation/admin-guide/LSM/landlock.rst for audit record format, tracepoint usage, and filtering examples.”h]”hŒqSee Documentation/admin-guide/LSM/landlock.rst for audit record format, tracepoint usage, and filtering examples.”…”�”}”(hj×1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´KËhjÖ0h²hubhó)�”}”(hhh]”(hø)�”}”(hŒ Trace events”h]”hŒ Trace events”…”�”}”(hjè1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hjå1h²hh³hÇh´KÒubj()�”}”(hŒ–See Documentation/trace/events-landlock.rst for trace event usage and format details; the full event reference lives there and is not duplicated here.”h]”hŒ–See Documentation/trace/events-landlock.rst for trace event usage and format details; the full event reference lives there and is not duplicated here.”…”�”}”(hjö1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´KÔhjå1h²hubeh}”(h]”Œ trace-events”ah ]”h"]”Œ trace events”ah$]”h&]”uh1hòhjÖ0h²hh³hÇh´KÒubeh}”(h]”Œdenial-logging”ah ]”h"]”Œdenial logging”ah$]”h&]”uh1hòhhôh²hh³hÇh´K¶ubhó)�”}”(hhh]”(hø)�”}”(hŒAdditional documentation”h]”hŒAdditional documentation”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hj2h²hh³hÇh´KØubjÁ)�”}”(hhh]”(jÆ)�”}”(hŒ(Documentation/userspace-api/landlock.rst”h]”j()�”}”(hj*2h]”hŒ(Documentation/userspace-api/landlock.rst”…”�”}”(hj,2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´KÚhj(2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj%2h²hh³hÇh´NubjÆ)�”}”(hŒ*Documentation/admin-guide/LSM/landlock.rst”h]”j()�”}”(hjA2h]”hŒ*Documentation/admin-guide/LSM/landlock.rst”…”�”}”(hjC2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´KÛhj?2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj%2h²hh³hÇh´NubjÆ)�”}”(hŒ'Documentation/trace/events-landlock.rst”h]”j()�”}”(hjX2h]”hŒ'Documentation/trace/events-landlock.rst”…”�”}”(hjZ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´KÜhjV2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj%2h²hh³hÇh´NubjÆ)�”}”(hŒhttps://landlock.io ”h]”j()�”}”(hŒhttps://landlock.io”h]”j4)�”}”(hjs2h]”hŒhttps://landlock.io”…”�”}”(hju2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”js2uh1j3hjq2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³hÇh´KÝhjm2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj%2h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jvjwuh1jÀh³hÇh´KÚhj2h²hubh¶)�”}”(hŒLinks”h]”hŒLinks”…”�”}”hj•2sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhj2h²hh³hÇh´KßubjŸ)�”}”(hŒ‘.. _tools/testing/selftests/landlock/: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/tools/testing/selftests/landlock/”h]”h}”(h]”Œ tools-testing-selftests-landlock”ah ]”h"]”Œ!tools/testing/selftests/landlock/”ah$]”h&]”j�j�uh1jžh´Kàhj2h²hh³hÇj²Kubeh}”(h]”Œadditional-documentation”ah ]”h"]”Œadditional documentation”ah$]”h&]”uh1hòhhôh²hh³hÇh´KØubeh}”(h]”Œ!landlock-lsm-kernel-documentation”ah ]”h"]”Œ"landlock lsm: kernel documentation”ah$]”h&]”uh1hòhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(h÷NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jâ2Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”(Œfile descriptor access rights”]”j5aŒ!tools/testing/selftests/landlock/”]”jauŒrefids”}”jª]”j asŒnameids”}”(j¼2j¹2j}jzjcj`jÛjØj¯jFjWjªjVjSj j�jÓ0jÐ0j5 j2 jjj¤j¡jË0jÈ0j2j2j 2j2j´2j±2j¬2j©2uŒ nametypes”}”(j¼2‰j}‰jc‰jÛ‰j¯‰jWˆjV‰j ‰jÓ0‰j5 ‰j‰j¤‰jË0‰j2‰j 2‰j´2‰j¬2ˆuh}”(j¹2hôjzj¯j`j€jØj‘jFjÞjªj³jSj³j�jfjÐ0j£j2 j´jÔjÞjjjj8 jU jZ jÞ jã jfjkj–j›j¡jj5j:jùjþjÈ0j§jàjåj¦j«jèjíjkjpj®j³jtjyj]!jb!j$j $j©&j®&j•(jš(j¡+j¦+jí.jò.j2jÖ0j2jå1j±2j2j©2j£2uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)�”}”(hhh]”j()�”}”(hhh]”hŒ>Hyperlink target "scoped-flags-interaction" is not referenced.”…”�”}”hjP3sbah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjM3ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”K]uh1jK3ubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.