#ifndef _LINUX_ON_DEX_H #define _LINUX_ON_DEX_H #include #include #include // load AID_INET #define LOD_UID_PREFIX 0x61A8 //1638400000 #define CAP_LOD_SET ((kernel_cap_t){{ CAP_TO_MASK(CAP_CHOWN) \ | CAP_TO_MASK(CAP_DAC_OVERRIDE) \ | CAP_TO_MASK(CAP_FOWNER) \ | CAP_TO_MASK(CAP_KILL) \ | CAP_TO_MASK(CAP_SETGID) \ | CAP_TO_MASK(CAP_SETUID), \ 0 } }) #define LOD_INVALID_ID ((u32)-1) #define current_is_LOD() (((current_cred()->uid.val) >> 16) == LOD_UID_PREFIX) #define cred_is_LOD(cred) ((((cred)->uid.val) >> 16) == LOD_UID_PREFIX) #define inode_is_LOD(inode) ((((inode)->i_uid.val) >> 16) == LOD_UID_PREFIX) //print out argument name #define tostr__(x) # x #define tostr_(x) tostr__(x) #define uid_is_LOD(arg) __uid_is_LOD((arg), tostr_(arg)) #define gid_is_LOD(arg) __gid_is_LOD((arg), tostr_(arg)) static inline bool __uid_is_LOD(u32 id, char *id_name){ if ((id >> 16) == LOD_UID_PREFIX) return true; // Invalid UID is safe if (id == LOD_INVALID_ID) return true; #ifndef CONFIG_SAMSUNG_PRODUCT_SHIP printk(KERN_ERR "LOD: %s: PROC %s PID %d CURR_UID %d %s %d\n", __FUNCTION__, current->comm, current->pid, current_cred()->uid.val, id_name, id); #endif return false; } static inline bool __gid_is_LOD(u32 id, char *id_name){ if ((id >> 16) == LOD_UID_PREFIX) return true; // Invalid UID is safe if (id == LOD_INVALID_ID) return true; // INET gid is allowed for LOD if (id == AID_INET.val) return true; #ifndef CONFIG_SAMSUNG_PRODUCT_SHIP printk(KERN_ERR "LOD: %s: PROC %s PID %d CURR_UID %d %s %d\n", __FUNCTION__, current->comm, current->pid, current_cred()->uid.val, id_name, id); #endif return false; } #endif /* !_LINUX_ON_DEX_H */