]> git.apps.os.sepia.ceph.com Git - ceph-client.git/commitdiff
ceph: fix wrong sizeof argument issue in register_session()
authorViacheslav Dubeyko <Slava.Dubeyko@ibm.com>
Fri, 6 Jun 2025 19:05:21 +0000 (12:05 -0700)
committerIlya Dryomov <idryomov@gmail.com>
Wed, 11 Jun 2025 07:45:05 +0000 (09:45 +0200)
The Coverity Scan service has detected the wrong sizeof
argument in register_session() [1]. The CID 1598909 defect
contains explanation: "The wrong sizeof value is used in
an expression or as argument to a function. The result is
an incorrect value that may cause unexpected program behaviors.
In register_session: The sizeof operator is invoked on
the wrong argument (CWE-569)".

The patch introduces a ptr_size variable that is initialized
by sizeof(struct ceph_mds_session *). And this variable is used
instead of sizeof(void *) in the code.

[1] https://scan5.scan.coverity.com/#/project-view/64304/10063?selectedIssue=1598909

Signed-off-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
fs/ceph/mds_client.c

index 2fab9e769b35ef98e4c15c0c6d312127fdac95f8..9eed6d73a50815b8ae57f4ce4a9a5b4b96c8ec07 100644 (file)
@@ -979,14 +979,15 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
        if (mds >= mdsc->max_sessions) {
                int newmax = 1 << get_count_order(mds + 1);
                struct ceph_mds_session **sa;
+               size_t ptr_size = sizeof(struct ceph_mds_session *);
 
                doutc(cl, "realloc to %d\n", newmax);
-               sa = kcalloc(newmax, sizeof(void *), GFP_NOFS);
+               sa = kcalloc(newmax, ptr_size, GFP_NOFS);
                if (!sa)
                        goto fail_realloc;
                if (mdsc->sessions) {
                        memcpy(sa, mdsc->sessions,
-                              mdsc->max_sessions * sizeof(void *));
+                              mdsc->max_sessions * ptr_size);
                        kfree(mdsc->sessions);
                }
                mdsc->sessions = sa;