1b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley#include <sys/types.h>
2b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley
34df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich#ifndef _SYSTEM_EXTRAS_EXT4_UTILS_XATTR_H
44df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich#define _SYSTEM_EXTRAS_EXT4_UTILS_XATTR_H 1
54df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich
6b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley#define EXT4_XATTR_MAGIC 0xEA020000
7b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley#define EXT4_XATTR_INDEX_SECURITY 6
8b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley
94df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevichstruct ext4_xattr_header {
104df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich    __le32  h_magic;
114df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich    __le32  h_refcount;
124df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich    __le32  h_blocks;
134df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich    __le32  h_hash;
144df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich    __le32  h_checksum;
154df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich    __u32   h_reserved[3];
164df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich};
174df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich
184df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevichstruct ext4_xattr_ibody_header {
194df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich    __le32  h_magic;
204df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich};
214df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich
22b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalleystruct ext4_xattr_entry {
23b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley    __u8 e_name_len;
24b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley    __u8 e_name_index;
25b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley    __le16 e_value_offs;
26b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley    __le32 e_value_block;
27b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley    __le32 e_value_size;
28b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley    __le32 e_hash;
29b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley    char e_name[0];
30b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley};
31b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley
32b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley#define EXT4_XATTR_PAD_BITS 2
33b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley#define EXT4_XATTR_PAD (1<<EXT4_XATTR_PAD_BITS)
34b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley#define EXT4_XATTR_ROUND (EXT4_XATTR_PAD-1)
35b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley#define EXT4_XATTR_LEN(name_len) \
36b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley    (((name_len) + EXT4_XATTR_ROUND + \
37b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley    sizeof(struct ext4_xattr_entry)) & ~EXT4_XATTR_ROUND)
384df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich#define EXT4_XATTR_NEXT(entry) \
394df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich    ((struct ext4_xattr_entry *)( \
404df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich     (char *)(entry) + EXT4_XATTR_LEN((entry)->e_name_len)))
41b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley#define EXT4_XATTR_SIZE(size) \
42b4eca4b24af9c80ebb2a7fa2ba539a48096b7576Stephen Smalley    (((size) + EXT4_XATTR_ROUND) & ~EXT4_XATTR_ROUND)
437900c773815d062deb266f744f95aa76b3573fa3Colin Cross#define IS_LAST_ENTRY(entry) (*(uint32_t *)(entry) == 0)
444df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich
454df62f342dbbe2f5cca831ce789dc0426d32ec03Nick Kralevich#endif /* !_SYSTEM_EXTRAS_EXT4_UTILS_XATTR_H */
46