--- /dev/null
+From 791cc43b36eb1f88166c8505900cad1b43c7fe1a Mon Sep 17 00:00:00 2001
+From: Artem Savkov <asavkov@redhat.com>
+Date: Wed, 14 Sep 2016 07:40:35 +1000
+Subject: Make __xfs_xattr_put_listen preperly report errors.
+
+From: Artem Savkov <asavkov@redhat.com>
+
+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 <asavkov@redhat.com>
+Reviewed-by: Dave Chinner <dchinner@redhat.com>
+Signed-off-by: Dave Chinner <david@fromorbit.com>
+Cc: Eric Sandeen <sandeen@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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;