linux/fs/ubifs
Richard Weinberger fcc28a8b7b ubifs: Fix journal replay wrt. xattr nodes
commit 1cb51a15b5 upstream.

When replaying the journal it can happen that a journal entry points to
a garbage collected node.
This is the case when a power-cut occurred between a garbage collect run
and a commit. In such a case nodes have to be read using the failable
read functions to detect whether the found node matches what we expect.

One corner case was forgotten, when the journal contains an entry to
remove an inode all xattrs have to be removed too. UBIFS models xattr
like directory entries, so the TNC code iterates over
all xattrs of the inode and removes them too. This code re-uses the
functions for walking directories and calls ubifs_tnc_next_ent().
ubifs_tnc_next_ent() expects to be used only after the journal and
aborts when a node does not match the expected result. This behavior can
render an UBIFS volume unmountable after a power-cut when xattrs are
used.

Fix this issue by using failable read functions in ubifs_tnc_next_ent()
too when replaying the journal.
Fixes: 1e51764a3c ("UBIFS: add new flash file system")
Reported-by: Rock Lee <rockdotlee@gmail.com>
Reviewed-by: David Gstir <david@sigma-star.at>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2017-03-16 02:27:00 +00:00
..
budget.c UBIFS: Remove unused variables in ubifs_budget_space 2014-05-13 13:45:16 +03:00
commit.c UBIFS: fix a race condition 2014-11-14 15:20:08 +00:00
compress.c UBIFS: comply with coding style 2012-08-31 17:32:57 +03:00
debug.c UBIFS: Fix dump messages in ubifs_dump_lprops 2014-05-27 15:05:23 +03:00
debug.h UBIFS: print less 2012-08-31 17:32:58 +03:00
dir.c ubifs: Fix regression in ubifs_readdir() 2017-02-23 03:54:24 +00:00
file.c fs: Give dentry to inode_change_ok() instead of inode 2017-02-23 03:53:52 +00:00
find.c UBIFS: fix mounting problems after power cuts 2012-10-26 16:26:44 +03:00
gc.c UBIFS: remove unnecessary code in ubifs_garbage_collect 2013-10-22 13:34:27 +01:00
io.c UBIFS: respect MS_SILENT mount flag 2014-06-02 18:00:52 +03:00
ioctl.c new helper: file_inode(file) 2013-02-22 23:31:31 -05:00
journal.c ubifs: switch to %pd 2013-10-24 23:34:51 -04:00
Kconfig UBIFS: remove Kconfig debugging option 2012-05-16 19:53:46 +03:00
key.h UBIFS: mark unused key objects as invalid 2010-08-30 10:19:08 +03:00
log.c UBIFS: fix free log space calculation 2014-11-14 15:20:08 +00:00
lprops.c UBIFS: introduce categorized lprops counter 2012-10-26 16:00:26 +03:00
lpt.c UBIFS: print less 2012-08-31 17:32:58 +03:00
lpt_commit.c arch: Mass conversion of smp_mb__*() 2014-04-18 14:20:48 +02:00
Makefile UBIFS: remove Kconfig debugging option 2012-05-16 19:53:46 +03:00
master.c UBIFS: remove mst_mutex 2014-11-14 15:20:08 +00:00
misc.h UBIFS: introduce more I/O helpers 2011-07-04 10:54:33 +03:00
orphan.c fs/ubifs: use rbtree postorder iteration helper instead of opencoding 2014-01-23 16:37:03 -08:00
recovery.c fs/ubifs: use rbtree postorder iteration helper instead of opencoding 2014-01-23 16:37:03 -08:00
replay.c UBIFS: print less 2012-08-31 17:32:58 +03:00
sb.c No big changes for 3.7 in UBIFS: 2012-10-02 20:47:48 -07:00
scan.c UBIFS: comply with coding style 2012-08-31 17:32:57 +03:00
shrinker.c UBIFS: Remove incorrect assertion in shrink_tnc() 2014-06-02 11:28:24 +03:00
super.c UBIFS: remove mst_mutex 2014-11-14 15:20:08 +00:00
tnc.c ubifs: Fix journal replay wrt. xattr nodes 2017-03-16 02:27:00 +00:00
tnc_commit.c ubifs: Fix assertion in layout_in_gaps() 2016-11-20 01:17:16 +00:00
tnc_misc.c UBIFS: print less 2012-08-31 17:32:58 +03:00
ubifs-media.h UBIFS: add a superblock flag for free space fix-up 2011-05-16 14:12:14 +03:00
ubifs.h UBIFS: remove mst_mutex 2014-11-14 15:20:08 +00:00
xattr.c ubifs: Fix xattr_names length in exit paths 2017-02-23 03:54:17 +00:00