ceph: fix null pointer dereference
authorNathaniel Yazdani <n1ght.4nd.d4y@gmail.com>
Mon, 5 Aug 2013 04:04:30 +0000 (21:04 -0700)
committerSage Weil <sage@inktank.com>
Sat, 10 Aug 2013 00:52:58 +0000 (17:52 -0700)
When register_session() is given an out-of-range argument for mds,
ceph_mdsmap_get_addr() will return a null pointer, which would be given to
ceph_con_open() & be dereferenced, causing a kernel oops. This fixes bug #4685
in the Ceph bug tracker <http://tracker.ceph.com/issues/4685>.

Signed-off-by: Nathaniel Yazdani <n1ght.4nd.d4y@gmail.com>
Reviewed-by: Sage Weil <sage@inktank.com>
fs/ceph/mds_client.c

index 3eb1b4470c855dad36655c5f6cf903dbe2ecf0f7..6b40d8112c64080e800ec5e2722dcfca15b76ad5 100644 (file)
@@ -414,6 +414,9 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
 {
        struct ceph_mds_session *s;
 
+       if (mds >= mdsc->mdsmap->m_max_mds)
+               return ERR_PTR(-EINVAL);
+
        s = kzalloc(sizeof(*s), GFP_NOFS);
        if (!s)
                return ERR_PTR(-ENOMEM);