lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <75CE3DA6-3A1B-4802-BC71-4BBE37095116@dilger.ca>
Date:   Wed, 23 Nov 2016 20:44:54 -0700
From:   Andreas Dilger <adilger@...ger.ca>
To:     Jan Kara <jack@...e.cz>
Cc:     Ted Tso <tytso@....edu>, linux-ext4@...r.kernel.org
Subject: Re: [PATCH 2/2] ext4: Inode flags diet

On Oct 5, 2016, at 6:42 AM, Jan Kara <jack@...e.cz> wrote:
> 
> Remove 6 inode flags that were apparently never used and only take up
> space in inode flags field which is already full.
> 
> There are also other inode flags of doubtful use (not used by current
> Linux kernel - IMAGIC, NOTAIL, EA_INODE) but let's leave them there for
> now since I'm not quite sure about their status.

The EA_INODE flag is in use for large xattrs by Lustre.  I keep meaning
to push that upstream, but it depends on implementing new functionality
(64KB direct-access xattr chunk) that Ted requested, so I haven't
resubmitted it.

IMAGIC was supposed to be used by AFS, not sure if it is or not.

NOTAIL is used by btrfs, and in theory we could also use it with ext4
to prevent inline data being stored in the file?

The DIRTY, COMPRBLK, and NOCOMPR flags could definitely be removed since
we have never used these in ext4.

The ext2 versions of these flags have been redefined in terms of the
corresponding FS_*_FL flags, which makes it easier to see which flags
are common and which (if any) are unique to ext4.

The SECRM_FL is basically unusable from userspace, since the files
could be snapshotted, COW'd, or FTL'd in different places before the
file is unlinked.  The only real way secure erase is usable is if the
file is encrypted before it is written to disk.  This flag is present
in several other kernel filesystems and should be deleted from all of
them, possibly leaving a comment that this flag was previously SECRM
until kernel version 4.9 (or whatever) so it is not re-used immediately.

The COMPR and NOCOMPR flags are used by other filesystems (btrfs, ubifs,
cifs at least), so we could use it internally but it would be hard to
use for a new visible feature.

It seems it would also be possible to remove FS_EOFBLOCKS_FL from fs.h
since it is not even used by ext4 anymore.

Cheers, Andreas

> Signed-off-by: Jan Kara <jack@...e.cz>
> ---
> fs/ext4/ext4.h | 34 +++++-----------------------------
> 1 file changed, 5 insertions(+), 29 deletions(-)
> 
> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
> index a77a15df15b0..29605fb01cf8 100644
> --- a/fs/ext4/ext4.h
> +++ b/fs/ext4/ext4.h
> @@ -363,19 +363,11 @@ struct flex_groups {
> /*
>  * Inode flags
>  */
> -#define	EXT4_SECRM_FL			0x00000001 /* Secure deletion */
> -#define	EXT4_UNRM_FL			0x00000002 /* Undelete */
> -#define	EXT4_COMPR_FL			0x00000004 /* Compress file */
> #define EXT4_SYNC_FL			0x00000008 /* Synchronous updates */
> #define EXT4_IMMUTABLE_FL		0x00000010 /* Immutable file */
> #define EXT4_APPEND_FL			0x00000020 /* writes to file may only append */
> #define EXT4_NODUMP_FL			0x00000040 /* do not dump file */
> #define EXT4_NOATIME_FL			0x00000080 /* do not update atime */
> -/* Reserved for compression usage... */
> -#define EXT4_DIRTY_FL			0x00000100
> -#define EXT4_COMPRBLK_FL		0x00000200 /* One or more compressed clusters */
> -#define EXT4_NOCOMPR_FL			0x00000400 /* Don't compress */
> -	/* nb: was previously EXT2_ECOMPR_FL */
> #define EXT4_ENCRYPT_FL			0x00000800 /* encrypted file */
> /* End compression flags --- maybe not all used */
> #define EXT4_INDEX_FL			0x00001000 /* hash-indexed directory */
> @@ -392,8 +384,8 @@ struct flex_groups {
> #define EXT4_PROJINHERIT_FL		0x20000000 /* Create with parents projid */
> #define EXT4_RESERVED_FL		0x80000000 /* reserved for ext4 lib */
> 
> -#define EXT4_FL_USER_VISIBLE		0x304BDFFF /* User visible flags */
> -#define EXT4_FL_USER_MODIFIABLE		0x204380FF /* User modifiable flags */
> +#define EXT4_FL_USER_VISIBLE		0x304BD8F8 /* User visible flags */
> +#define EXT4_FL_USER_MODIFIABLE		0x204380F8 /* User modifiable flags */
> 
> /* Flags we can manipulate with through EXT4_IOC_FSSETXATTR */
> #define EXT4_FL_XFLAG_VISIBLE		(EXT4_SYNC_FL | \
> @@ -404,11 +396,9 @@ struct flex_groups {
> 					 EXT4_PROJINHERIT_FL)
> 
> /* Flags that should be inherited by new inodes from their parent. */
> -#define EXT4_FL_INHERITED (EXT4_SECRM_FL | EXT4_UNRM_FL | EXT4_COMPR_FL |\
> -			   EXT4_SYNC_FL | EXT4_NODUMP_FL | EXT4_NOATIME_FL |\
> -			   EXT4_NOCOMPR_FL | EXT4_JOURNAL_DATA_FL |\
> -			   EXT4_NOTAIL_FL | EXT4_DIRSYNC_FL |\
> -			   EXT4_PROJINHERIT_FL)
> +#define EXT4_FL_INHERITED (EXT4_SYNC_FL | EXT4_NODUMP_FL | EXT4_NOATIME_FL |\
> +			   EXT4_JOURNAL_DATA_FL | EXT4_NOTAIL_FL | \
> +			   EXT4_DIRSYNC_FL | EXT4_PROJINHERIT_FL)
> 
> /* Flags that are appropriate for regular files (all but dir-specific ones). */
> #define EXT4_REG_FLMASK (~(EXT4_DIRSYNC_FL | EXT4_TOPDIR_FL))
> @@ -431,20 +421,12 @@ static inline __u32 ext4_mask_flags(umode_t mode, __u32 flags)
>  * Inode flags used for atomic set/get
>  */
> enum {
> -	EXT4_INODE_SECRM	= 0,	/* Secure deletion */
> -	EXT4_INODE_UNRM		= 1,	/* Undelete */
> -	EXT4_INODE_COMPR	= 2,	/* Compress file */
> 	EXT4_INODE_SYNC		= 3,	/* Synchronous updates */
> 	EXT4_INODE_IMMUTABLE	= 4,	/* Immutable file */
> 	EXT4_INODE_APPEND	= 5,	/* writes to file may only append */
> 	EXT4_INODE_NODUMP	= 6,	/* do not dump file */
> 	EXT4_INODE_NOATIME	= 7,	/* do not update atime */
> -/* Reserved for compression usage... */
> -	EXT4_INODE_DIRTY	= 8,
> -	EXT4_INODE_COMPRBLK	= 9,	/* One or more compressed clusters */
> -	EXT4_INODE_NOCOMPR	= 10,	/* Don't compress */
> 	EXT4_INODE_ENCRYPT	= 11,	/* Encrypted file */
> -/* End compression flags --- maybe not all used */
> 	EXT4_INODE_INDEX	= 12,	/* hash-indexed directory */
> 	EXT4_INODE_IMAGIC	= 13,	/* AFS directory */
> 	EXT4_INODE_JOURNAL_DATA	= 14,	/* file data should be journaled */
> @@ -478,17 +460,11 @@ enum {
> 
> static inline void ext4_check_flag_values(void)
> {
> -	CHECK_FLAG_VALUE(SECRM);
> -	CHECK_FLAG_VALUE(UNRM);
> -	CHECK_FLAG_VALUE(COMPR);
> 	CHECK_FLAG_VALUE(SYNC);
> 	CHECK_FLAG_VALUE(IMMUTABLE);
> 	CHECK_FLAG_VALUE(APPEND);
> 	CHECK_FLAG_VALUE(NODUMP);
> 	CHECK_FLAG_VALUE(NOATIME);
> -	CHECK_FLAG_VALUE(DIRTY);
> -	CHECK_FLAG_VALUE(COMPRBLK);
> -	CHECK_FLAG_VALUE(NOCOMPR);
> 	CHECK_FLAG_VALUE(ENCRYPT);
> 	CHECK_FLAG_VALUE(INDEX);
> 	CHECK_FLAG_VALUE(IMAGIC);
> --
> 2.6.6
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


Cheers, Andreas






Download attachment "signature.asc" of type "application/pgp-signature" (834 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ