]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
ceph: have MDS map decoding use entity_addr_t decoder
authorJeff Layton <jlayton@kernel.org>
Tue, 4 Jun 2019 15:26:36 +0000 (11:26 -0400)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 8 Jul 2019 12:01:43 +0000 (14:01 +0200)
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/mdsmap.c

index 701b4fb0fb5a4cd576880139ca2e183dc0b39e98..ce2d00da5096a68521e1bba42ee0340cb3647eb9 100644 (file)
@@ -107,7 +107,7 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
        struct ceph_mdsmap *m;
        const void *start = *p;
        int i, j, n;
-       int err = -EINVAL;
+       int err;
        u8 mdsmap_v, mdsmap_cv;
        u16 mdsmap_ev;
 
@@ -183,8 +183,9 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
                inc = ceph_decode_32(p);
                state = ceph_decode_32(p);
                state_seq = ceph_decode_64(p);
-               ceph_decode_copy(p, &addr, sizeof(addr));
-               ceph_decode_addr(&addr);
+               err = ceph_decode_entity_addr(p, end, &addr);
+               if (err)
+                       goto corrupt;
                ceph_decode_copy(p, &laggy_since, sizeof(laggy_since));
                *p += sizeof(u32);
                ceph_decode_32_safe(p, end, namelen, bad);
@@ -357,7 +358,7 @@ bad_ext:
 nomem:
        err = -ENOMEM;
        goto out_err;
-bad:
+corrupt:
        pr_err("corrupt mdsmap\n");
        print_hex_dump(KERN_DEBUG, "mdsmap: ",
                       DUMP_PREFIX_OFFSET, 16, 1,
@@ -365,6 +366,9 @@ bad:
 out_err:
        ceph_mdsmap_destroy(m);
        return ERR_PTR(err);
+bad:
+       err = -EINVAL;
+       goto corrupt;
 }
 
 void ceph_mdsmap_destroy(struct ceph_mdsmap *m)