diff mbox series

ubifs: mount fails after power cycle

Message ID eae14602-7809-882f-1935-a271a49ee585@marvell.com
State Accepted
Commit cf7ea719ce60cd885cce5023dfaf7833d9fc1442
Delegated to: Heiko Schocher
Headers show
Series ubifs: mount fails after power cycle | expand

Commit Message

Ravi Minnikanti July 30, 2024, 9:14 a.m. UTC
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.

~

Change-Id: I487ae4d172e228e72ac31d158d668f209142bce0
Signed-off-by: rminnikanti <rminnikanti@marvell.com>
---
 fs/ubifs/replay.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Heiko Schocher July 31, 2024, 3:50 a.m. UTC | #1
Hello Ravi,

On 30.07.24 11:14, Ravi Minnikanti wrote:
> 
> 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.
> 
> ~
> 
> Change-Id: I487ae4d172e228e72ac31d158d668f209142bce0
> Signed-off-by: rminnikanti <rminnikanti@marvell.com>
> ---
>   fs/ubifs/replay.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

Good catch, thanks!

Reviewed-by: Heiko Schocher <hs@denx.de>

bye,
Heiko
diff mbox series

Patch

diff --git a/fs/ubifs/replay.c b/fs/ubifs/replay.c
index aa7f281ef6..b6e03b76d4 100644
--- a/fs/ubifs/replay.c
+++ b/fs/ubifs/replay.c
@@ -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");