cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

posix_acl.h (3347B)


      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
     18struct user_namespace;
     19
     20struct posix_acl_entry {
     21	short			e_tag;
     22	unsigned short		e_perm;
     23	union {
     24		kuid_t		e_uid;
     25		kgid_t		e_gid;
     26	};
     27};
     28
     29struct posix_acl {
     30	refcount_t		a_refcount;
     31	struct rcu_head		a_rcu;
     32	unsigned int		a_count;
     33	struct posix_acl_entry	a_entries[];
     34};
     35
     36#define FOREACH_ACL_ENTRY(pa, acl, pe) \
     37	for(pa=(acl)->a_entries, pe=pa+(acl)->a_count; pa<pe; pa++)
     38
     39
     40/*
     41 * Duplicate an ACL handle.
     42 */
     43static inline struct posix_acl *
     44posix_acl_dup(struct posix_acl *acl)
     45{
     46	if (acl)
     47		refcount_inc(&acl->a_refcount);
     48	return acl;
     49}
     50
     51/*
     52 * Free an ACL handle.
     53 */
     54static inline void
     55posix_acl_release(struct posix_acl *acl)
     56{
     57	if (acl && refcount_dec_and_test(&acl->a_refcount))
     58		kfree_rcu(acl, a_rcu);
     59}
     60
     61
     62/* posix_acl.c */
     63
     64extern void posix_acl_init(struct posix_acl *, int);
     65extern struct posix_acl *posix_acl_alloc(int, gfp_t);
     66extern struct posix_acl *posix_acl_from_mode(umode_t, gfp_t);
     67extern int posix_acl_equiv_mode(const struct posix_acl *, umode_t *);
     68extern int __posix_acl_create(struct posix_acl **, gfp_t, umode_t *);
     69extern int __posix_acl_chmod(struct posix_acl **, gfp_t, umode_t);
     70
     71extern struct posix_acl *get_posix_acl(struct inode *, int);
     72extern int set_posix_acl(struct user_namespace *, struct inode *, int,
     73			 struct posix_acl *);
     74
     75struct posix_acl *get_cached_acl_rcu(struct inode *inode, int type);
     76
     77#ifdef CONFIG_FS_POSIX_ACL
     78int posix_acl_chmod(struct user_namespace *, struct inode *, umode_t);
     79extern int posix_acl_create(struct inode *, umode_t *, struct posix_acl **,
     80		struct posix_acl **);
     81int posix_acl_update_mode(struct user_namespace *, struct inode *, umode_t *,
     82			  struct posix_acl **);
     83
     84extern int simple_set_acl(struct user_namespace *, struct inode *,
     85			  struct posix_acl *, int);
     86extern int simple_acl_create(struct inode *, struct inode *);
     87
     88struct posix_acl *get_cached_acl(struct inode *inode, int type);
     89void set_cached_acl(struct inode *inode, int type, struct posix_acl *acl);
     90void forget_cached_acl(struct inode *inode, int type);
     91void forget_all_cached_acls(struct inode *inode);
     92int posix_acl_valid(struct user_namespace *, const struct posix_acl *);
     93int posix_acl_permission(struct user_namespace *, struct inode *,
     94			 const struct posix_acl *, int);
     95
     96static inline void cache_no_acl(struct inode *inode)
     97{
     98	inode->i_acl = NULL;
     99	inode->i_default_acl = NULL;
    100}
    101#else
    102static inline int posix_acl_chmod(struct user_namespace *mnt_userns,
    103				  struct inode *inode, umode_t mode)
    104{
    105	return 0;
    106}
    107
    108#define simple_set_acl		NULL
    109
    110static inline int simple_acl_create(struct inode *dir, struct inode *inode)
    111{
    112	return 0;
    113}
    114static inline void cache_no_acl(struct inode *inode)
    115{
    116}
    117
    118static inline int posix_acl_create(struct inode *inode, umode_t *mode,
    119		struct posix_acl **default_acl, struct posix_acl **acl)
    120{
    121	*default_acl = *acl = NULL;
    122	return 0;
    123}
    124
    125static inline void forget_all_cached_acls(struct inode *inode)
    126{
    127}
    128#endif /* CONFIG_FS_POSIX_ACL */
    129
    130struct posix_acl *get_acl(struct inode *inode, int type);
    131
    132#endif  /* __LINUX_POSIX_ACL_H */