]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
fs/ceph/mds_client: fix memory leaks in ceph_mdsc_build_path() testing
authorMax Kellermann <max.kellermann@ionos.com>
Tue, 24 Feb 2026 13:26:57 +0000 (14:26 +0100)
committerViacheslav Dubeyko <Slava.Dubeyko@ibm.com>
Wed, 25 Feb 2026 19:28:49 +0000 (11:28 -0800)
Add __putname() calls to error code paths that did not free the "path"
pointer obtained by __getname().  If ownership of this pointer is not
passed to the caller via path_info.path, the function must free it
before returning.

Fixes: 3fd945a79e14 ("ceph: encode encrypted name in ceph_mdsc_build_path and dentry release")
Fixes: 550f7ca98ee0 ("ceph: give up on paths longer than PATH_MAX")
Cc: stable@vger.kernel.org
Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
fs/ceph/mds_client.c

index 61be770c7486d33288fbc5f0dcc53e6f3d404a5d..351e0008a4fa48f6410fab6bfcf24c94271d1758 100644 (file)
@@ -2809,6 +2809,7 @@ retry:
                        if (ret < 0) {
                                dput(parent);
                                dput(cur);
+                               __putname(path);
                                return ERR_PTR(ret);
                        }
 
@@ -2818,6 +2819,7 @@ retry:
                                if (len < 0) {
                                        dput(parent);
                                        dput(cur);
+                                       __putname(path);
                                        return ERR_PTR(len);
                                }
                        }
@@ -2854,6 +2856,7 @@ retry:
                 * cannot ever succeed.  Creating paths that long is
                 * possible with Ceph, but Linux cannot use them.
                 */
+               __putname(path);
                return ERR_PTR(-ENAMETOOLONG);
        }