# PR_SET_TAGGED_ADDR_CTRL

## NAME



           PR_SET_TAGGED_ADDR_CTRL - control support for passing tagged user-
           space addresses to the kernel
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <linux/prctl.h>  **/* Definition of **PR_*** constants */
           **#include <sys/prctl.h>**
    
           **int prctl(PR_SET_TAGGED_ADDR_CTRL, long** _mode_**, 0L, 0L, 0L);**
    


## DESCRIPTION



           Controls support for passing tagged user-space addresses to the
           kernel (i.e., addresses where bits 56—63 are not all zero).
    
           The level of support is selected by _support_ , which can be one of
           the following:
    
           **0L** Addresses that are passed for the purpose of being
                  dereferenced by the kernel must be untagged.
    
           **PR_TAGGED_ADDR_ENABLE**
                  Addresses that are passed for the purpose of being
                  dereferenced by the kernel may be tagged, with the
                  exceptions summarized below.
    
           On success, the mode specified in _mode_ is set for the calling
           thread.
    
           If _prctl(PR_SET_TAGGED_ADDR_CTRL, 0L, 0L, 0L, 0L)_ fails with
           **EINVAL** , then all addresses passed to the kernel must be untagged.
    
           Irrespective of which mode is set, addresses passed to certain
           interfaces must always be untagged:
    
           •  brk(2), mmap(2), shmat(2), shmdt(2), and the _new_address_
              argument of mremap(2).
    
              (Prior to Linux 5.6 these accepted tagged addresses, but the
              behaviour may not be what you expect.  Don't rely on it.)
    
           •  ‘polymorphic’ interfaces that accept pointers to arbitrary
              types cast to a _void *_ or other generic type, specifically
              **prctl**(), ioctl(2), and in general setsockopt(2) (only certain
              specific setsockopt(2) options allow tagged addresses).
    
           This list of exclusions may shrink when moving from one kernel
           version to a later kernel version.  While the kernel may make some
           guarantees for backwards compatibility reasons, for the purposes
           of new software the effect of passing tagged addresses to these
           interfaces is unspecified.
    
           The mode set by this call is inherited across fork(2) and
           clone(2).  The mode is reset by execve(2) to 0 (i.e., tagged
           addresses not permitted in the user/kernel ABI).
    


## RETURN VALUE



           On success, 0 is returned.  On error, -1 is returned, and _errno_ is
           set to indicate the error.
    


## ERRORS



           **EINVAL** _mode_ is invalid or unsupported.
    
           **EINVAL** This feature is disabled via _/proc/sys/abi/_
                  _tagged_addr_disabled_.
    


## FILES



           _/proc/sys/abi/tagged_addr_disabled_
    


## STANDARDS



           Linux.  arm64 only.
    


## CAVEATS



           This call is primarily intended for use by the run-time
           environment.  A successful **PR_SET_TAGGED_ADDR_CTRL** call elsewhere
           may crash the calling process.  The conditions for using it safely
           are complex and system-dependent.  Don't use it unless you know
           what you are doing.
    


* * *