1
2
3
4
5
6
7
8
9
10#ifndef _POSIX_ACL_XATTR_H
11#define _POSIX_ACL_XATTR_H
12
13#include <uapi/linux/xattr.h>
14#include <uapi/linux/posix_acl_xattr.h>
15#include <linux/posix_acl.h>
16
17static inline size_t
18posix_acl_xattr_size(int count)
19{
20 return (sizeof(struct posix_acl_xattr_header) +
21 (count * sizeof(struct posix_acl_xattr_entry)));
22}
23
24static inline int
25posix_acl_xattr_count(size_t size)
26{
27 if (size < sizeof(struct posix_acl_xattr_header))
28 return -1;
29 size -= sizeof(struct posix_acl_xattr_header);
30 if (size % sizeof(struct posix_acl_xattr_entry))
31 return -1;
32 return size / sizeof(struct posix_acl_xattr_entry);
33}
34
35#ifdef CONFIG_FS_POSIX_ACL
36void posix_acl_fix_xattr_from_user(struct user_namespace *mnt_userns,
37 void *value, size_t size);
38void posix_acl_fix_xattr_to_user(struct user_namespace *mnt_userns,
39 void *value, size_t size);
40#else
41static inline void posix_acl_fix_xattr_from_user(struct user_namespace *mnt_userns,
42 void *value, size_t size)
43{
44}
45static inline void posix_acl_fix_xattr_to_user(struct user_namespace *mnt_userns,
46 void *value, size_t size)
47{
48}
49#endif
50
51struct posix_acl *posix_acl_from_xattr(struct user_namespace *user_ns,
52 const void *value, size_t size);
53int posix_acl_to_xattr(struct user_namespace *user_ns,
54 const struct posix_acl *acl, void *buffer, size_t size);
55
56extern const struct xattr_handler posix_acl_access_xattr_handler;
57extern const struct xattr_handler posix_acl_default_xattr_handler;
58
59#endif
60