Skip to contentSkip to conversation

Patch "ceph: fix endianness bug in frag_tree_split_cmp" has been added to the 4.9-stable tree

PATCH [email protected] 1 participant 1 message Jan 23, 2017

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

ceph: fix endianness bug in frag_tree_split_cmp

to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
ceph-fix-endianness-bug-in-frag_tree_split_cmp.patch
and it can be found in the queue-4.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From fe2ed42517533068ac03eed5630fffafff27eacf Mon Sep 17 00:00:00 2001

From: Jeff Layton <[email protected]>
Date: Thu, 12 Jan 2017 14:42:39 -0500
Subject: ceph: fix endianness bug in frag_tree_split_cmp

From: Jeff Layton <[email protected]>

commit fe2ed42517533068ac03eed5630fffafff27eacf upstream.

sparse says:

fs/ceph/inode.c:308:36: warning: incorrect type in argument 1 (different base types)
fs/ceph/inode.c:308:36: expected unsigned int [unsigned] [usertype] a
fs/ceph/inode.c:308:36: got restricted __le32 [usertype] frag
fs/ceph/inode.c:308:46: warning: incorrect type in argument 2 (different base types)
fs/ceph/inode.c:308:46: expected unsigned int [unsigned] [usertype] b
fs/ceph/inode.c:308:46: got restricted __le32 [usertype] frag

We need to convert these values to host-endian before calling the comparator.

Fixes a407846ef7c6 ("ceph: don't assume frag tree splits in mds reply are sorted")
---
 fs/ceph/inode.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
fs/ceph/inode.c +2 -1
@@ -305,7 +305,8 @@ static int frag_tree_split_cmp(const voi
 {
 	struct ceph_frag_tree_split *ls = (struct ceph_frag_tree_split*)l;
 	struct ceph_frag_tree_split *rs = (struct ceph_frag_tree_split*)r;
-	return ceph_frag_compare(ls->frag, rs->frag);
+	return ceph_frag_compare(le32_to_cpu(ls->frag),
+				 le32_to_cpu(rs->frag));
 }
 
 static bool is_frag_child(u32 f, struct ceph_inode_frag *frag)

Patches currently in stable-queue which might be from [email protected] are

queue-4.9/ceph-fix-endianness-of-getattr-mask-in-ceph_d_revalidate.patch queue-4.9/ceph-fix-endianness-bug-in-frag_tree_split_cmp.patch queue-4.9/ceph-fix-bad-endianness-handling-in-parse_reply_info_extra.patch