diff options
Diffstat (limited to 'meta-security/recipes-devtools/e2fsprogs/files')
-rw-r--r-- | meta-security/recipes-devtools/e2fsprogs/files/ext_attr.c-fix-adding-multiple-xattrs-during-image-c.patch | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/meta-security/recipes-devtools/e2fsprogs/files/ext_attr.c-fix-adding-multiple-xattrs-during-image-c.patch b/meta-security/recipes-devtools/e2fsprogs/files/ext_attr.c-fix-adding-multiple-xattrs-during-image-c.patch new file mode 100644 index 000000000..67b8b68fb --- /dev/null +++ b/meta-security/recipes-devtools/e2fsprogs/files/ext_attr.c-fix-adding-multiple-xattrs-during-image-c.patch @@ -0,0 +1,51 @@ +From 3b2b0922e031628f313f5480c4f1f9413c6656bf Mon Sep 17 00:00:00 2001 +From: Richard Purdie <richard.purdie@linuxfoundation.org> +Date: Wed, 10 Feb 2016 15:51:43 +0100 +Subject: [PATCH] ext_attr.c: fix adding multiple xattrs during image creation + +http://www.nongnu.org/ext2-doc/ext2.html#CONTRIB-EXTENDED-ATTRIBUTES +contains the small snippet that "The entry descriptors are sorted by +attribute name, so that two extended attribute blocks can be compared +efficiently". + +The libext2fs code in e2fsprogs needs to be taught about this minor +sorting detail. Otherwise creating an image with "mkfs.ext -d" from a +filesystem that reports xattrs in listxattr() in an order that does +not match the expected order will lead to an image where listxattr() +reports all xattrs, but reading some values fails with ENODATA. + +[Patch from RP, commit message from Patrick and RP] + +Upstream-Status: Pending [https://bugzilla.yoctoproject.org/show_bug.cgi?id=8992] +--- + lib/ext2fs/ext_attr.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c +index 0a4f8c0..be8f9c3 100644 +--- a/lib/ext2fs/ext_attr.c ++++ b/lib/ext2fs/ext_attr.c +@@ -258,6 +258,7 @@ static struct ea_name_index ea_names[] = { + static int attr_compare(const void *a, const void *b) + { + const struct ext2_xattr *xa = a, *xb = b; ++ size_t len; + + if (xa->name == NULL) + return +1; +@@ -267,7 +268,11 @@ static int attr_compare(const void *a, const void *b) + return -1; + else if (!strcmp(xb->name, "system.data")) + return +1; +- return 0; ++ len = strlen(xa->name) - strlen(xb->name); ++ if (len) ++ return len; ++ ++ return strcmp(xa->name, xb->name); + } + + static const char *find_ea_prefix(int index) +-- +2.1.4 + |