[PATCH] jobs: Fix resource leak in makejob

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If the ps ckmalloc call fails in makejob, the job will still be
marked as used and thus leaked.  Fix this by moving the ckmalloc
call earlier.

Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
---
 src/jobs.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/jobs.c b/src/jobs.c
index 4cf6b8c..02ec6f4 100644
--- a/src/jobs.c
+++ b/src/jobs.c
@@ -765,8 +765,9 @@ err:
 
 struct job *makejob(int nprocs)
 {
-	int i;
+	struct procstat *ps;
 	struct job *jp;
+	int i;
 
 	for (i = njobs, jp = jobtab ; ; jp++) {
 		if (--i < 0) {
@@ -783,6 +784,9 @@ struct job *makejob(int nprocs)
 		break;
 	}
 	memset(jp, 0, sizeof(*jp));
+	ps = &jp->ps0;
+	if (nprocs > 1)
+		ps = ckmalloc(nprocs * sizeof(*ps));
 #if JOBS
 	if (jobctl)
 		jp->jobctl = 1;
@@ -790,10 +794,7 @@ struct job *makejob(int nprocs)
 	jp->prev_job = curjob;
 	curjob = jp;
 	jp->used = 1;
-	jp->ps = &jp->ps0;
-	if (nprocs > 1) {
-		jp->ps = ckmalloc(nprocs * sizeof (struct procstat));
-	}
+	jp->ps = ps;
 	TRACE(("makejob(%d) returns %%%d\n", nprocs,
 	    jobno(jp)));
 	return jp;
-- 
2.39.2

-- 
Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt




[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux