# landlock_create_ruleset

## NAME



           landlock_create_ruleset - create a new Landlock ruleset
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <linux/landlock.h>  **/* Definition of **LANDLOCK_*** constants */
           **#include <sys/syscall.h>     **/* Definition of **SYS_*** constants */
           **#include <unistd.h>**
    
           **int syscall(SYS_landlock_create_ruleset,**
                       **const struct landlock_ruleset_attr ***_attr_**,**
                       **size_t** _size_ **, uint32_t** _flags_**);**
    


## DESCRIPTION



           A Landlock ruleset identifies a set of rules (i.e., actions on
           objects).  This **landlock_create_ruleset**() system call creates a
           new file descriptor which identifies a ruleset.  This file
           descriptor can then be used by landlock_add_rule(2) and
           landlock_restrict_self(2).  See landlock(7) for a global overview.
    
           _attr_ specifies the properties of the new ruleset.  It points to
           the following structure:
    
                      struct landlock_ruleset_attr {
                          __u64 handled_access_fs;
                          __u64 handled_access_net;
                      };
    
                  _handled_access_fs_ is a bitmask of handled filesystem
                  actions (see **Filesystem actions** in landlock(7)).
    
                  _handled_access_net_ is a bitmask of handled network actions
                  (see **Network actions** in landlock(7)).
    
                  This structure defines a set of _handled access rights_ , a
                  set of actions on different object types, which should be
                  denied by default when the ruleset is enacted.  Vice versa,
                  access rights that are not specifically listed here are not
                  going to be denied by this ruleset when it is enacted.
    
                  For historical reasons, the **LANDLOCK_ACCESS_FS_REFER** right
                  is always denied by default, even when its bit is not set
                  in _handled_access_fs_.  In order to add new rules with this
                  access right, the bit must still be set explicitly (see
                  **Filesystem actions** in landlock(7)).
    
                  The explicit listing of _handled access rights_ is required
                  for backwards compatibility reasons.  In most use cases,
                  processes that use Landlock will _handle_ a wide range or all
                  access rights that they know about at build time (and that
                  they have tested with a kernel that supported them all).
    
                  This structure can grow in future Landlock versions.
    
           _size_ must be specified as _sizeof(struct landlock_ruleset_attr)_ for
           compatibility reasons.
    
           _flags_ must be 0 if _attr_ is used.  Otherwise, _flags_ can be set to:
    
           **LANDLOCK_CREATE_RULESET_VERSION**
                  If _attr_ is NULL and _size_ is 0, then the returned value is
                  the highest supported Landlock ABI version (starting at 1).
                  This version can be used for a best-effort security
                  approach, which is encouraged when user space is not pinned
                  to a specific kernel version.  All features documented in
                  these man pages are available with the version 1.
    


## RETURN VALUE



           On success, **landlock_create_ruleset**() returns a new Landlock
           ruleset file descriptor, or a Landlock ABI version, according to
           _flags_.  On error, -1 is returned and _errno_ is set to indicate the
           error.
    


## ERRORS



           **landlock_create_ruleset**() can fail for the following reasons:
    
           **EOPNOTSUPP**
                  Landlock is supported by the kernel but disabled at boot
                  time.
    
           **EINVAL** Unknown _flags_ , or unknown access, or too small _size_.
    
           **E2BIG** _size_ is too big.
    
           **EFAULT** _attr_ was not a valid address.
    
           **ENOMSG** Empty accesses (i.e., _attr_ did not specify any access
                  rights to restrict).
    


## STANDARDS



           Linux.
    


## EXAMPLES



           See landlock(7).
    


* * *