|
@@ -237,6 +237,7 @@ struct inodes_stat_t {
|
|
|
#define S_PRIVATE 512 /* Inode is fs-internal */
|
|
|
#define S_IMA 1024 /* Inode has an associated IMA struct */
|
|
|
#define S_AUTOMOUNT 2048 /* Automount/referral quasi-directory */
|
|
|
+#define S_NOSEC 4096 /* no suid or xattr security attributes */
|
|
|
|
|
|
/*
|
|
|
* Note that nosuid etc flags are inode-specific: setting some file-system
|
|
@@ -273,6 +274,7 @@ struct inodes_stat_t {
|
|
|
#define IS_PRIVATE(inode) ((inode)->i_flags & S_PRIVATE)
|
|
|
#define IS_IMA(inode) ((inode)->i_flags & S_IMA)
|
|
|
#define IS_AUTOMOUNT(inode) ((inode)->i_flags & S_AUTOMOUNT)
|
|
|
+#define IS_NOSEC(inode) ((inode)->i_flags & S_NOSEC)
|
|
|
|
|
|
/* the read-only stuff doesn't really belong here, but any other place is
|
|
|
probably as bad and I don't want to create yet another include file. */
|
|
@@ -2582,5 +2584,16 @@ int __init get_filesystem_list(char *buf);
|
|
|
#define OPEN_FMODE(flag) ((__force fmode_t)(((flag + 1) & O_ACCMODE) | \
|
|
|
(flag & __FMODE_NONOTIFY)))
|
|
|
|
|
|
+static inline int is_sxid(mode_t mode)
|
|
|
+{
|
|
|
+ return (mode & S_ISUID) || ((mode & S_ISGID) && (mode & S_IXGRP));
|
|
|
+}
|
|
|
+
|
|
|
+static inline void inode_has_no_xattr(struct inode *inode)
|
|
|
+{
|
|
|
+ if (!is_sxid(inode->i_mode))
|
|
|
+ inode->i_flags |= S_NOSEC;
|
|
|
+}
|
|
|
+
|
|
|
#endif /* __KERNEL__ */
|
|
|
#endif /* _LINUX_FS_H */
|