| From bdc068446290675bf2cdffeb4297aff9eb650331 Mon Sep 17 00:00:00 2001 |
| From: Jeff Layton <jlayton@redhat.com> |
| Date: Thu, 12 Jan 2017 14:42:41 -0500 |
| Subject: [PATCH] ceph: fix bad endianness handling in parse_reply_info_extra |
| |
| commit 6df8c9d80a27cb587f61b4f06b57e248d8bc3f86 upstream. |
| |
| sparse says: |
| |
| fs/ceph/mds_client.c:291:23: warning: restricted __le32 degrades to integer |
| fs/ceph/mds_client.c:293:28: warning: restricted __le32 degrades to integer |
| fs/ceph/mds_client.c:294:28: warning: restricted __le32 degrades to integer |
| fs/ceph/mds_client.c:296:28: warning: restricted __le32 degrades to integer |
| |
| The op value is __le32, so we need to convert it before comparing it. |
| |
| Cc: stable@vger.kernel.org # needs backporting for < 3.14 |
| Signed-off-by: Jeff Layton <jlayton@redhat.com> |
| Reviewed-by: Sage Weil <sage@redhat.com> |
| Signed-off-by: Ilya Dryomov <idryomov@gmail.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c |
| index f72d4ae303b2..fe11afc15cdc 100644 |
| --- a/fs/ceph/mds_client.c |
| +++ b/fs/ceph/mds_client.c |
| @@ -288,12 +288,13 @@ static int parse_reply_info_extra(void **p, void *end, |
| struct ceph_mds_reply_info_parsed *info, |
| u64 features) |
| { |
| - if (info->head->op == CEPH_MDS_OP_GETFILELOCK) |
| + u32 op = le32_to_cpu(info->head->op); |
| + |
| + if (op == CEPH_MDS_OP_GETFILELOCK) |
| return parse_reply_info_filelock(p, end, info, features); |
| - else if (info->head->op == CEPH_MDS_OP_READDIR || |
| - info->head->op == CEPH_MDS_OP_LSSNAP) |
| + else if (op == CEPH_MDS_OP_READDIR || op == CEPH_MDS_OP_LSSNAP) |
| return parse_reply_info_dir(p, end, info, features); |
| - else if (info->head->op == CEPH_MDS_OP_CREATE) |
| + else if (op == CEPH_MDS_OP_CREATE) |
| return parse_reply_info_create(p, end, info, features); |
| else |
| return -EIO; |
| -- |
| 2.10.1 |
| |