| From fb2162df74bb19552db3d988fd11c787cf5fad56 Mon Sep 17 00:00:00 2001 |
| From: Jeff Mahoney <jeffm@suse.com> |
| Date: Fri, 23 Apr 2010 13:17:41 -0400 |
| Subject: reiserfs: fix corruption during shrinking of xattrs |
| |
| From: Jeff Mahoney <jeffm@suse.com> |
| |
| commit fb2162df74bb19552db3d988fd11c787cf5fad56 upstream. |
| |
| Commit 48b32a3553a54740d236b79a90f20147a25875e3 ("reiserfs: use generic |
| xattr handlers") introduced a problem that causes corruption when extended |
| attributes are replaced with a smaller value. |
| |
| The issue is that the reiserfs_setattr to shrink the xattr file was moved |
| from before the write to after the write. |
| |
| The root issue has always been in the reiserfs xattr code, but was papered |
| over by the fact that in the shrink case, the file would just be expanded |
| again while the xattr was written. |
| |
| The end result is that the last 8 bytes of xattr data are lost. |
| |
| This patch fixes it to use new_size. |
| |
| Addresses https://bugzilla.kernel.org/show_bug.cgi?id=14826 |
| |
| Signed-off-by: Jeff Mahoney <jeffm@suse.com> |
| Reported-by: Christian Kujau <lists@nerdbynature.de> |
| Tested-by: Christian Kujau <lists@nerdbynature.de> |
| Cc: Edward Shishkin <edward.shishkin@gmail.com> |
| Cc: Jethro Beekman <kernel@jbeekman.nl> |
| Cc: Greg Surbey <gregsurbey@hotmail.com> |
| Cc: Marco Gatti <marco.gatti@gmail.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| fs/reiserfs/xattr.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/reiserfs/xattr.c |
| +++ b/fs/reiserfs/xattr.c |
| @@ -557,7 +557,7 @@ reiserfs_xattr_set_handle(struct reiserf |
| if (!err && new_size < i_size_read(dentry->d_inode)) { |
| struct iattr newattrs = { |
| .ia_ctime = current_fs_time(inode->i_sb), |
| - .ia_size = buffer_size, |
| + .ia_size = new_size, |
| .ia_valid = ATTR_SIZE | ATTR_CTIME, |
| }; |
| |