Whamcloud - gitweb
LU-17000 utils: Fix do_warn_interval resource leak 30/54330/8
authorArshad Hussain <arshad.hussain@aeoncomputing.com>
Fri, 8 Mar 2024 10:12:26 +0000 (15:42 +0530)
committerOleg Drokin <green@whamcloud.com>
Tue, 23 Apr 2024 19:52:20 +0000 (19:52 +0000)
In function do_warn_interval 'fd' opened was not closed
in case write() returned error. This leak is fixed by
calling close() before returning

This patch also checks the return from futimens() and
logs an error in case it fails

CoverityID: 415056 ("Resource leak")
Fixes: a454c9efd8 (LU-17137 utils: Deprecate l_getidentity 'files' alias)
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: Ice0269d524e237a4fc421b2a91d8f26b5e41b13f
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/54330
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Timothy Day <timday@amazon.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lustre/utils/l_getidentity.c

index 30bb186..3c76c85 100644 (file)
@@ -763,6 +763,7 @@ static void do_warn_interval(struct timeval *now)
                        write_warning = true;
        } else {
                show_warning = (now->tv_sec - sbuf.st_mtim.tv_sec) > ONE_DAY;
+               write_warning = sbuf.st_size == 0; /* file still empty? */
        }
 
        if (write_warning || show_warning) {
@@ -782,13 +783,17 @@ static void do_warn_interval(struct timeval *now)
 
                        /* unlikely, but rate-limiting may be broken */
                        if (written <= 0)
-                               return;
+                               goto out_close;
                }
                errlog("WARNING: %s", msg);
 
                /* rate limiting is working */
                if (show_warning)
-                       futimens(fd, times);
+                       if (futimens(fd, times) < 0)
+                               errlog("Change Timestamp failed: %s\n",
+                                      strerror(errno));
+out_close:
+               close(fd);
        }
 }