posix_acl_xattr.h 1.58 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0 */
Linus Torvalds's avatar
Linus Torvalds committed
2 3 4 5 6 7 8 9 10 11 12
/*
  File: linux/posix_acl_xattr.h

  Extended attribute system call representation of Access Control Lists.

  Copyright (C) 2000 by Andreas Gruenbacher <a.gruenbacher@computer.org>
  Copyright (C) 2002 SGI - Silicon Graphics, Inc <linux-xfs@oss.sgi.com>
 */
#ifndef _POSIX_ACL_XATTR_H
#define _POSIX_ACL_XATTR_H

13
#include <uapi/linux/xattr.h>
14
#include <uapi/linux/posix_acl_xattr.h>
Linus Torvalds's avatar
Linus Torvalds committed
15 16 17 18 19
#include <linux/posix_acl.h>

static inline size_t
posix_acl_xattr_size(int count)
{
20 21
	return (sizeof(struct posix_acl_xattr_header) +
		(count * sizeof(struct posix_acl_xattr_entry)));
Linus Torvalds's avatar
Linus Torvalds committed
22 23 24 25 26
}

static inline int
posix_acl_xattr_count(size_t size)
{
27
	if (size < sizeof(struct posix_acl_xattr_header))
Linus Torvalds's avatar
Linus Torvalds committed
28
		return -1;
29 30
	size -= sizeof(struct posix_acl_xattr_header);
	if (size % sizeof(struct posix_acl_xattr_entry))
Linus Torvalds's avatar
Linus Torvalds committed
31
		return -1;
32
	return size / sizeof(struct posix_acl_xattr_entry);
Linus Torvalds's avatar
Linus Torvalds committed
33 34
}

35 36 37 38 39 40 41 42 43 44 45 46
#ifdef CONFIG_FS_POSIX_ACL
void posix_acl_fix_xattr_from_user(void *value, size_t size);
void posix_acl_fix_xattr_to_user(void *value, size_t size);
#else
static inline void posix_acl_fix_xattr_from_user(void *value, size_t size)
{
}
static inline void posix_acl_fix_xattr_to_user(void *value, size_t size)
{
}
#endif

47 48 49 50
struct posix_acl *posix_acl_from_xattr(struct user_namespace *user_ns, 
				       const void *value, size_t size);
int posix_acl_to_xattr(struct user_namespace *user_ns,
		       const struct posix_acl *acl, void *buffer, size_t size);
51

52 53 54
extern const struct xattr_handler posix_acl_access_xattr_handler;
extern const struct xattr_handler posix_acl_default_xattr_handler;

Linus Torvalds's avatar
Linus Torvalds committed
55
#endif	/* _POSIX_ACL_XATTR_H */