From dd2fb045a93086e0733e3e6ca056bdf5bb8b43ca Mon Sep 17 00:00:00 2001 From: 3idey Date: Sun, 8 Feb 2026 12:37:11 +0200 Subject: [PATCH] fsnotify: Fix memory leak in pre_dump_one_fanotify error path When irmap_queue_cache fails, the remaining fanotify mark entries and the mark array are not freed, causing a memory leak. Add cleanup label to ensure proper deallocation of remaining entries and the mark array on error paths. Signed-off-by: 3idey --- criu/fsnotify.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/criu/fsnotify.c b/criu/fsnotify.c index 55bae63bd..5c05fa28f 100644 --- a/criu/fsnotify.c +++ b/criu/fsnotify.c @@ -476,7 +476,7 @@ free: static int pre_dump_one_fanotify(int pid, int lfd) { FanotifyFileEntry fe = FANOTIFY_FILE_ENTRY__INIT; - int i; + int i, ret = -1; if (parse_fdinfo_pid(pid, lfd, FD_TYPES__FANOTIFY, &fe)) { pr_err("Failed to parse fdinfo for fanotify (pid %d lfd %d)\n", pid, lfd); @@ -489,13 +489,18 @@ static int pre_dump_one_fanotify(int pid, int lfd) if (me->type == MARK_TYPE__INODE && irmap_queue_cache(me->s_dev, me->ie->i_ino, me->ie->f_handle)) { pr_err("Failed to queue irmap cache for fanotify mark (dev %#x ino %#" PRIx64 " mask %#x)\n", me->s_dev, me->ie->i_ino, me->mask); - return -1; + goto err; } xfree(me); } - return 0; + ret = 0; +err: + for (; i < fe.n_mark; i++) + xfree(fe.mark[i]); + xfree(fe.mark); + return ret; } const struct fdtype_ops fanotify_dump_ops = {