Skip to main content

landlock_create_ruleset_with_scope

Function landlock_create_ruleset_with_scope 

Source
pub fn landlock_create_ruleset_with_scope(
    handled_fs: LandlockAccessFs,
    handled_net: LandlockAccessNet,
    scope: LandlockScope,
) -> Result<LandlockRuleset, Errno>
Expand description

Crée un ruleset Landlock gérant fichiers, réseau ET portées (ABI v6+).

§Ce que la portée ajoute, et que les deux autres ne pouvaient pas dire

handled_fs et handled_net bornent ce qu’on a le droit de faire sur une ressource nommée. scoped borne autre chose : jusqu’où le domaine peut atteindre en dehors de lui-même. Un socket UNIX abstrait n’a pas de chemin et un signal ne traverse aucun descripteur — ni l’un ni l’autre ne pouvait donc être borné par une règle.

§Pourquoi une fonction de plus

Même raison qu’entre landlock_create_ruleset et landlock_create_ruleset_with_net : le noyau lit exactement size octets. Sonder landlock_supported_abi avant de choisir la forme est le seul moyen de ne pas mourir sur un noyau plus ancien.

§Errors

  • EINVAL : un bit de handled_fs, handled_net ou scope est inconnu de l’ABI courante ;
  • E2BIG : le noyau ne connaît pas la forme à trois champs (ABI < v6) ;
  • ENOMEM, ENOSYS : comme landlock_create_ruleset.

§Examples

use air_sys_syscall::security::{landlock_create_ruleset_with_scope, landlock_supported_abi};
use air_sys_types::security::{LandlockAccessFs, LandlockAccessNet, LandlockScope};

// Les portées n'existent qu'à partir de l'ABI v6 : on demande avant de composer.
if landlock_supported_abi().unwrap_or(0) >= 6 {
    let ruleset = landlock_create_ruleset_with_scope(
        LandlockAccessFs::READ_FILE,
        LandlockAccessNet::CONNECT_TCP,
        LandlockScope::ABSTRACT_UNIX_SOCKET | LandlockScope::SIGNAL,
    )
    .expect("create_ruleset avec portées");
    let _ = ruleset;
}