diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-05-10 18:15:50 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-05-10 18:15:50 +0200 |
commit | b0a89d8086577ee0b8d9eb81d7fdd07e8f7662dd (patch) | |
tree | 2b51bac05ace287702b55858e9366059f34fa489 /fs/ubifs/super.c | |
parent | 5fdedd222f566b61f9e5c9278e10af777384e9b4 (diff) | |
parent | 49b2ae70344bc3212aa268576cb15d903b32558e (diff) | |
download | barebox-b0a89d8086577ee0b8d9eb81d7fdd07e8f7662dd.tar.gz barebox-b0a89d8086577ee0b8d9eb81d7fdd07e8f7662dd.tar.xz |
Merge branch 'for-next/ubifs'
Diffstat (limited to 'fs/ubifs/super.c')
-rw-r--r-- | fs/ubifs/super.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index fd1b645f9f..b48e21fae6 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c @@ -391,6 +391,9 @@ static int init_constants_early(struct ubifs_info *c) c->ranges[UBIFS_REF_NODE].len = UBIFS_REF_NODE_SZ; c->ranges[UBIFS_TRUN_NODE].len = UBIFS_TRUN_NODE_SZ; c->ranges[UBIFS_CS_NODE].len = UBIFS_CS_NODE_SZ; + c->ranges[UBIFS_AUTH_NODE].min_len = UBIFS_AUTH_NODE_SZ; + c->ranges[UBIFS_AUTH_NODE].max_len = UBIFS_AUTH_NODE_SZ + + UBIFS_MAX_HMAC_LEN; c->ranges[UBIFS_INO_NODE].min_len = UBIFS_INO_NODE_SZ; c->ranges[UBIFS_INO_NODE].max_len = UBIFS_MAX_INO_NODE_SZ; @@ -564,6 +567,9 @@ static int alloc_wbufs(struct ubifs_info *c) c->jheads[i].wbuf.jhead = i; c->jheads[i].grouped = 1; + c->jheads[i].log_hash = ubifs_hash_get_desc(c); + if (IS_ERR(c->jheads[i].log_hash)) + goto out; } /* @@ -574,6 +580,12 @@ static int alloc_wbufs(struct ubifs_info *c) c->jheads[GCHD].grouped = 0; return 0; + +out: + while (i--) + kfree(c->jheads[i].log_hash); + + return err; } /** @@ -753,6 +765,19 @@ static int mount_ubifs(struct ubifs_info *c) c->mounting = 1; + if (c->auth_key_name) { + if (IS_ENABLED(CONFIG_UBIFS_FS_AUTHENTICATION)) { + err = ubifs_init_authentication(c); + if (err) + goto out_free; + } else { + ubifs_err(c, "auth_key_name, but UBIFS is built without" + " authentication support"); + err = -EINVAL; + goto out_free; + } + } + err = ubifs_read_superblock(c); if (err) goto out_free; @@ -803,9 +828,10 @@ static int mount_ubifs(struct ubifs_info *c) if (!c->ro_mount) { } else if (c->need_recovery) { - err = ubifs_recover_size(c); + err = ubifs_recover_size(c, false); if (err) goto out_orphans; + } else { } if (c->need_recovery) { @@ -932,7 +958,10 @@ void ubifs_umount(struct ubifs_info *c) spin_unlock(&ubifs_infos_lock); free_wbufs(c); + ubifs_exit_authentication(c); + kfree(c->auth_key_name); + kfree(c->auth_hash_name); kfree(c->cbuf); kfree(c->rcvrd_mst_node); kfree(c->mst_node); |