diff --git a/contrib/pg_upgrade/file.c b/contrib/pg_upgrade/file.c
index 11f1d4bbcbd0842bf65d47a07e9d4526352519c6..473b029d0ae537f5a713eb4bb6e5c69f8af36e26 100644
--- a/contrib/pg_upgrade/file.c
+++ b/contrib/pg_upgrade/file.c
@@ -74,7 +74,10 @@ copyAndUpdateFile(migratorContext *ctx, pageCnvCtx *pageConverter,
 				return "can't open source file";
 
 			if ((dstfd = open(dst, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR)) < 0)
+			{
+				fclose(src_fd);
 				return "can't create destination file";
+			}
 
 			while ((bytesRead = read(src_fd, buf, BLCKSZ)) == BLCKSZ)
 			{
diff --git a/contrib/pg_upgrade/page.c b/contrib/pg_upgrade/page.c
index e732e22bbcbd8583fd55ee15d533feeb0d50c341..cc0ef54a8add613b82226016f5e84edce318f03e 100644
--- a/contrib/pg_upgrade/page.c
+++ b/contrib/pg_upgrade/page.c
@@ -103,7 +103,10 @@ getPageVersion(migratorContext *ctx, uint16 *version, const char *pathName)
 		return "can't open relation";
 
 	if ((bytesRead = read(relfd, &page, sizeof(page))) != sizeof(page))
+	{
+		close(relfd);
 		return "can't read page header";
+	}
 
 	*version = PageGetPageLayoutVersion(&page);