LCOV - code coverage report
Current view: top level - include/linux - posix_acl.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 9 11 81.8 %
Date: 2022-04-01 14:58:12 Functions: 1 1 100.0 %
Branches: 7 12 58.3 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: GPL-2.0 */
       2                 :            : /*
       3                 :            :   File: linux/posix_acl.h
       4                 :            : 
       5                 :            :   (C) 2002 Andreas Gruenbacher, <a.gruenbacher@computer.org>
       6                 :            : */
       7                 :            : 
       8                 :            : 
       9                 :            : #ifndef __LINUX_POSIX_ACL_H
      10                 :            : #define __LINUX_POSIX_ACL_H
      11                 :            : 
      12                 :            : #include <linux/bug.h>
      13                 :            : #include <linux/slab.h>
      14                 :            : #include <linux/rcupdate.h>
      15                 :            : #include <linux/refcount.h>
      16                 :            : #include <uapi/linux/posix_acl.h>
      17                 :            : 
      18                 :            : struct posix_acl_entry {
      19                 :            :         short                   e_tag;
      20                 :            :         unsigned short          e_perm;
      21                 :            :         union {
      22                 :            :                 kuid_t          e_uid;
      23                 :            :                 kgid_t          e_gid;
      24                 :            :         };
      25                 :            : };
      26                 :            : 
      27                 :            : struct posix_acl {
      28                 :            :         refcount_t              a_refcount;
      29                 :            :         struct rcu_head         a_rcu;
      30                 :            :         unsigned int            a_count;
      31                 :            :         struct posix_acl_entry  a_entries[0];
      32                 :            : };
      33                 :            : 
      34                 :            : #define FOREACH_ACL_ENTRY(pa, acl, pe) \
      35                 :            :         for(pa=(acl)->a_entries, pe=pa+(acl)->a_count; pa<pe; pa++)
      36                 :            : 
      37                 :            : 
      38                 :            : /*
      39                 :            :  * Duplicate an ACL handle.
      40                 :            :  */
      41                 :            : static inline struct posix_acl *
      42                 :       3498 : posix_acl_dup(struct posix_acl *acl)
      43                 :            : {
      44   [ -  +  -  + ]:       3498 :         if (acl)
      45                 :          0 :                 refcount_inc(&acl->a_refcount);
      46                 :       3498 :         return acl;
      47                 :            : }
      48                 :            : 
      49                 :            : /*
      50                 :            :  * Free an ACL handle.
      51                 :            :  */
      52                 :            : static inline void
      53                 :       3330 : posix_acl_release(struct posix_acl *acl)
      54                 :            : {
      55   [ -  +  -  - ]:       3330 :         if (acl && refcount_dec_and_test(&acl->a_refcount))
      56                 :          0 :                 kfree_rcu(acl, a_rcu);
      57                 :       3330 : }
      58                 :            : 
      59                 :            : 
      60                 :            : /* posix_acl.c */
      61                 :            : 
      62                 :            : extern void posix_acl_init(struct posix_acl *, int);
      63                 :            : extern struct posix_acl *posix_acl_alloc(int, gfp_t);
      64                 :            : extern int posix_acl_valid(struct user_namespace *, const struct posix_acl *);
      65                 :            : extern int posix_acl_permission(struct inode *, const struct posix_acl *, int);
      66                 :            : extern struct posix_acl *posix_acl_from_mode(umode_t, gfp_t);
      67                 :            : extern int posix_acl_equiv_mode(const struct posix_acl *, umode_t *);
      68                 :            : extern int __posix_acl_create(struct posix_acl **, gfp_t, umode_t *);
      69                 :            : extern int __posix_acl_chmod(struct posix_acl **, gfp_t, umode_t);
      70                 :            : 
      71                 :            : extern struct posix_acl *get_posix_acl(struct inode *, int);
      72                 :            : extern int set_posix_acl(struct inode *, int, struct posix_acl *);
      73                 :            : 
      74                 :            : #ifdef CONFIG_FS_POSIX_ACL
      75                 :            : extern int posix_acl_chmod(struct inode *, umode_t);
      76                 :            : extern int posix_acl_create(struct inode *, umode_t *, struct posix_acl **,
      77                 :            :                 struct posix_acl **);
      78                 :            : extern int posix_acl_update_mode(struct inode *, umode_t *, struct posix_acl **);
      79                 :            : 
      80                 :            : extern int simple_set_acl(struct inode *, struct posix_acl *, int);
      81                 :            : extern int simple_acl_create(struct inode *, struct inode *);
      82                 :            : 
      83                 :            : struct posix_acl *get_cached_acl(struct inode *inode, int type);
      84                 :            : struct posix_acl *get_cached_acl_rcu(struct inode *inode, int type);
      85                 :            : void set_cached_acl(struct inode *inode, int type, struct posix_acl *acl);
      86                 :            : void forget_cached_acl(struct inode *inode, int type);
      87                 :            : void forget_all_cached_acls(struct inode *inode);
      88                 :            : 
      89                 :       2289 : static inline void cache_no_acl(struct inode *inode)
      90                 :            : {
      91                 :       2289 :         inode->i_acl = NULL;
      92   [ +  +  +  + ]:       2289 :         inode->i_default_acl = NULL;
      93                 :            : }
      94                 :            : #else
      95                 :            : static inline int posix_acl_chmod(struct inode *inode, umode_t mode)
      96                 :            : {
      97                 :            :         return 0;
      98                 :            : }
      99                 :            : 
     100                 :            : #define simple_set_acl          NULL
     101                 :            : 
     102                 :            : static inline int simple_acl_create(struct inode *dir, struct inode *inode)
     103                 :            : {
     104                 :            :         return 0;
     105                 :            : }
     106                 :            : static inline void cache_no_acl(struct inode *inode)
     107                 :            : {
     108                 :            : }
     109                 :            : 
     110                 :            : static inline int posix_acl_create(struct inode *inode, umode_t *mode,
     111                 :            :                 struct posix_acl **default_acl, struct posix_acl **acl)
     112                 :            : {
     113                 :            :         *default_acl = *acl = NULL;
     114                 :            :         return 0;
     115                 :            : }
     116                 :            : 
     117                 :            : static inline void forget_all_cached_acls(struct inode *inode)
     118                 :            : {
     119                 :            : }
     120                 :            : #endif /* CONFIG_FS_POSIX_ACL */
     121                 :            : 
     122                 :            : struct posix_acl *get_acl(struct inode *inode, int type);
     123                 :            : 
     124                 :            : #endif  /* __LINUX_POSIX_ACL_H */

Generated by: LCOV version 1.14