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