ubifs: Raise write version to 5
Starting with version 5 the following properties change: - UBIFS_FLG_DOUBLE_HASH is mandatory - UBIFS_FLG_ENCRYPTION is optional but depdens on UBIFS_FLG_DOUBLE_HASH - Filesystems with unknown super block flags will be rejected, this allows us in future to add new features without raising the UBIFS write version. Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
@@ -466,6 +466,16 @@ static int validate_sb(struct ubifs_info *c, struct ubifs_sb_node *sup)
|
|||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!c->double_hash && c->fmt_version >= 5) {
|
||||||
|
err = 16;
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c->encrypted && c->fmt_version < 5) {
|
||||||
|
err = 17;
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
@@ -624,6 +634,13 @@ int ubifs_read_superblock(struct ubifs_info *c)
|
|||||||
c->double_hash = !!(sup_flags & UBIFS_FLG_DOUBLE_HASH);
|
c->double_hash = !!(sup_flags & UBIFS_FLG_DOUBLE_HASH);
|
||||||
c->encrypted = !!(sup_flags & UBIFS_FLG_ENCRYPTION);
|
c->encrypted = !!(sup_flags & UBIFS_FLG_ENCRYPTION);
|
||||||
|
|
||||||
|
if ((sup_flags & ~UBIFS_FLG_MASK) != 0) {
|
||||||
|
ubifs_err(c, "Unknown feature flags found: %#x",
|
||||||
|
sup_flags & ~UBIFS_FLG_MASK);
|
||||||
|
err = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_UBIFS_FS_ENCRYPTION
|
#ifndef CONFIG_UBIFS_FS_ENCRYPTION
|
||||||
if (c->encrypted) {
|
if (c->encrypted) {
|
||||||
ubifs_err(c, "file system contains encrypted files but UBIFS"
|
ubifs_err(c, "file system contains encrypted files but UBIFS"
|
||||||
|
@@ -46,7 +46,7 @@
|
|||||||
* UBIFS went into mainline kernel with format version 4. The older formats
|
* UBIFS went into mainline kernel with format version 4. The older formats
|
||||||
* were development formats.
|
* were development formats.
|
||||||
*/
|
*/
|
||||||
#define UBIFS_FORMAT_VERSION 4
|
#define UBIFS_FORMAT_VERSION 5
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read-only compatibility version. If the UBIFS format is changed, older UBIFS
|
* Read-only compatibility version. If the UBIFS format is changed, older UBIFS
|
||||||
@@ -429,6 +429,8 @@ enum {
|
|||||||
UBIFS_FLG_ENCRYPTION = 0x10,
|
UBIFS_FLG_ENCRYPTION = 0x10,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define UBIFS_FLG_MASK (UBIFS_FLG_BIGLPT|UBIFS_FLG_SPACE_FIXUP|UBIFS_FLG_DOUBLE_HASH|UBIFS_FLG_ENCRYPTION)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ubifs_ch - common header node.
|
* struct ubifs_ch - common header node.
|
||||||
* @magic: UBIFS node magic number (%UBIFS_NODE_MAGIC)
|
* @magic: UBIFS node magic number (%UBIFS_NODE_MAGIC)
|
||||||
|
Reference in New Issue
Block a user