libceph: simplify ceph_monc_handle_map()
authorIlya Dryomov <idryomov@gmail.com>
Wed, 26 Feb 2020 15:37:55 +0000 (16:37 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 30 Mar 2020 10:42:41 +0000 (12:42 +0200)
ceph_monc_handle_map() confuses static checkers which report a
false use-after-free on monc->monmap, missing that monc->monmap and
client->monc.monmap is the same pointer.

Use monc->monmap consistently and get rid of "old", which is redundant.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
net/ceph/mon_client.c

index 9d9e4e4..3d8c801 100644 (file)
@@ -467,7 +467,7 @@ static void ceph_monc_handle_map(struct ceph_mon_client *monc,
                                 struct ceph_msg *msg)
 {
        struct ceph_client *client = monc->client;
-       struct ceph_monmap *monmap = NULL, *old = monc->monmap;
+       struct ceph_monmap *monmap;
        void *p, *end;
 
        mutex_lock(&monc->mutex);
@@ -484,13 +484,13 @@ static void ceph_monc_handle_map(struct ceph_mon_client *monc,
                goto out;
        }
 
-       if (ceph_check_fsid(monc->client, &monmap->fsid) < 0) {
+       if (ceph_check_fsid(client, &monmap->fsid) < 0) {
                kfree(monmap);
                goto out;
        }
 
-       client->monc.monmap = monmap;
-       kfree(old);
+       kfree(monc->monmap);
+       monc->monmap = monmap;
 
        __ceph_monc_got_map(monc, CEPH_SUB_MONMAP, monc->monmap->epoch);
        client->have_fsid = true;