From: Greg Kroah-Hartman Date: Wed, 19 Oct 2016 07:30:03 +0000 (+0200) Subject: 4.7-stable patches X-Git-Tag: v4.4.26~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d64a1427b91f4396aaa355631b8d115e18292fc3;p=thirdparty%2Fkernel%2Fstable-queue.git 4.7-stable patches added patches: make-__xfs_xattr_put_listen-preperly-report-errors.patch --- diff --git a/queue-4.7/make-__xfs_xattr_put_listen-preperly-report-errors.patch b/queue-4.7/make-__xfs_xattr_put_listen-preperly-report-errors.patch new file mode 100644 index 00000000000..3ba51d00c2b --- /dev/null +++ b/queue-4.7/make-__xfs_xattr_put_listen-preperly-report-errors.patch @@ -0,0 +1,46 @@ +From 791cc43b36eb1f88166c8505900cad1b43c7fe1a Mon Sep 17 00:00:00 2001 +From: Artem Savkov +Date: Wed, 14 Sep 2016 07:40:35 +1000 +Subject: Make __xfs_xattr_put_listen preperly report errors. + +From: Artem Savkov + +commit 791cc43b36eb1f88166c8505900cad1b43c7fe1a upstream. + +Commit 2a6fba6 "xfs: only return -errno or success from attr ->put_listent" +changes the returnvalue of __xfs_xattr_put_listen to 0 in case when there is +insufficient space in the buffer assuming that setting context->count to -1 +would be enough, but all of the ->put_listent callers only check seen_enough. +This results in a failed assertion: +XFS: Assertion failed: context->count >= 0, file: fs/xfs/xfs_xattr.c, line: 175 +in insufficient buffer size case. + +This is only reproducible with at least 2 xattrs and only when the buffer +gets depleted before the last one. + +Furthermore if buffersize is such that it is enough to hold the last xattr's +name, but not enough to hold the sum of preceeding xattr names listxattr won't +fail with ERANGE, but will suceed returning last xattr's name without the +first character. The first character end's up overwriting data stored at +(context->alist - 1). + +Signed-off-by: Artem Savkov +Reviewed-by: Dave Chinner +Signed-off-by: Dave Chinner +Cc: Eric Sandeen +Signed-off-by: Greg Kroah-Hartman + +--- + fs/xfs/xfs_xattr.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/fs/xfs/xfs_xattr.c ++++ b/fs/xfs/xfs_xattr.c +@@ -147,6 +147,7 @@ __xfs_xattr_put_listent( + arraytop = context->count + prefix_len + namelen + 1; + if (arraytop > context->firstu) { + context->count = -1; /* insufficient space */ ++ context->seen_enough = 1; + return 0; + } + offset = (char *)context->alist + context->count; diff --git a/queue-4.7/series b/queue-4.7/series new file mode 100644 index 00000000000..1b26167693c --- /dev/null +++ b/queue-4.7/series @@ -0,0 +1 @@ +make-__xfs_xattr_put_listen-preperly-report-errors.patch