]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
ubifs: mount fails after power cycle
authorRavi Minnikanti <rminnikanti@marvell.com>
Tue, 30 Jul 2024 09:14:57 +0000 (02:14 -0700)
committerHeiko Schocher <hs@denx.de>
Sat, 10 Aug 2024 09:56:53 +0000 (11:56 +0200)
When kernel uses file system encryption, fscrypt on UBIFS v5,
after a hard power cycle UBIFS journal replay fails which results in mount failure.

Failure logs:
UBIFS: recovery needed
UBIFS error (pid 0): ubifs_validate_entry: bad directory entry node
UBIFS error (pid 0): replay_bud: bad node is at LEB 890:24576
UBIFS error (pid 0): ubifs_mount: Error reading superblock on volume 'ubi0:rootfs' errno=-22!

This change is ported from kernel:
commit id: 304790c038bc4af4f19774705409db27eafb09fc

Kernel commit description:
    Kernel commit description:
    ubifs: Relax checks in ubifs_validate_entry()

    With encrypted filenames we store raw binary data, doing
    string tests is no longer possible.

Signed-off-by: rminnikanti <rminnikanti@marvell.com>
Reviewed-by: Heiko Schocher <hs@denx.de>
fs/ubifs/replay.c

index aa7f281ef6b5afed336b318981863976bac6aaf4..b6e03b76d41b8889a3147a7f8f37e91fb070ccbd 100644 (file)
@@ -451,7 +451,7 @@ int ubifs_validate_entry(struct ubifs_info *c,
        if (le32_to_cpu(dent->ch.len) != nlen + UBIFS_DENT_NODE_SZ + 1 ||
            dent->type >= UBIFS_ITYPES_CNT ||
            nlen > UBIFS_MAX_NLEN || dent->name[nlen] != 0 ||
-           strnlen(dent->name, nlen) != nlen ||
+           (key_type == UBIFS_XENT_KEY && strnlen(dent->name, nlen) != nlen) ||
            le64_to_cpu(dent->inum) > MAX_INUM) {
                ubifs_err(c, "bad %s node", key_type == UBIFS_DENT_KEY ?
                          "directory entry" : "extended attribute entry");