[Intel-gfx] PATCH i-g-t small patch

Jani Nikula jani.nikula at linux.intel.com
Mon May 9 08:10:26 UTC 2016


On Fri, 06 May 2016, David CARLIER <devnexen at gmail.com> wrote:
> Hi all,
>
> this is a small patch to fix couple of mem leaks, possible double free case.
>
> Hope it is useful.

Please add your Signed-off-by: line to certify
http://developercertificate.org/ (see git log if you don't know what
this means).

Please send using git send-email.

BR,
Jani.

>
> Kind regards.
> From b2c1f0fa1aa8424b7d1200c2cc4171eeda719571 Mon Sep 17 00:00:00 2001
> From: David Carlier <devnexen at gmail.com>
> Date: Thu, 5 May 2016 16:36:58 +0100
> Subject: [PATCH i-g-t] couple of memory leak fixes. avoiding a double free.
>
> ---
>  benchmarks/gem_mmap.c              |  1 +
>  benchmarks/gem_syslatency.c        |  2 ++
>  benchmarks/gem_userptr_benchmark.c |  4 +++-
>  demos/intel_sprite_on.c            |  6 ++++++
>  overlay/gpu-perf.c                 | 21 ++++++++++++++++++---
>  tests/gem_render_linear_blits.c    |  7 ++++++-
>  tests/gem_render_tiled_blits.c     |  2 ++
>  tests/gem_tiled_swapping.c         |  1 +
>  tests/kms_atomic.c                 |  1 +
>  tests/kms_pipe_color.c             |  3 +++
>  tests/prime_self_import.c          |  2 ++
>  tools/intel_bios_dumper.c          |  1 +
>  tools/intel_opregion_decode.c      |  7 +++++--
>  13 files changed, 51 insertions(+), 7 deletions(-)
>
> diff --git a/benchmarks/gem_mmap.c b/benchmarks/gem_mmap.c
> index c809e08..98082ca 100644
> --- a/benchmarks/gem_mmap.c
> +++ b/benchmarks/gem_mmap.c
> @@ -194,5 +194,6 @@ int main(int argc, char **argv)
>  		printf("%7.3f\n", OBJECT_SIZE / elapsed(&start, &end) * loops / (1024*1024));
>  	}
>  
> +	free(buf);
>  	return 0;
>  }
> diff --git a/benchmarks/gem_syslatency.c b/benchmarks/gem_syslatency.c
> index 6cad3a0..d9d2ebf 100644
> --- a/benchmarks/gem_syslatency.c
> +++ b/benchmarks/gem_syslatency.c
> @@ -328,6 +328,8 @@ int main(int argc, char **argv)
>  		break;
>  	}
>  
> +	free(wait);
> +	free(busy);
>  	return 0;
>  
>  }
> diff --git a/benchmarks/gem_userptr_benchmark.c b/benchmarks/gem_userptr_benchmark.c
> index f7716df..5313f5e 100644
> --- a/benchmarks/gem_userptr_benchmark.c
> +++ b/benchmarks/gem_userptr_benchmark.c
> @@ -355,8 +355,10 @@ static void test_impact_overlap(int fd, const char *prefix)
>  
>  		for (i = 0; i < nr_bos[subtest]; i++)
>  			gem_close(fd, handles[i]);
> -		if (block)
> +		if (block) {
>  			free(block);
> +			block = NULL;
> +		}
>  	}
>  }
>  
> diff --git a/demos/intel_sprite_on.c b/demos/intel_sprite_on.c
> index 6dddded..c933d95 100644
> --- a/demos/intel_sprite_on.c
> +++ b/demos/intel_sprite_on.c
> @@ -574,6 +574,7 @@ static void ricochet(int tiled, int sprite_w, int sprite_h,
>  							  &sprite_plane_id);
>  		if (!sprite_plane_count) {
>  			printf("Failed to find sprite plane on crtc\n");
> +			free(sprite_plane_id);
>  			goto out;
>  		}
>  
> @@ -815,6 +816,11 @@ static void ricochet(int tiled, int sprite_w, int sprite_h,
>  				switch (key) {
>  				case 'q':       // Kill the program
>  				case 'Q':
> +					free(sprite_plane_id);
> +					free(sprite_x);
> +					free(sprite_y);
> +					free(delta_x);
> +					free(delta_y);
>  					goto out;
>  					break;
>  				case 's':       // Slow down sprite movement;
> diff --git a/overlay/gpu-perf.c b/overlay/gpu-perf.c
> index 42ac44d..e25adf5 100644
> --- a/overlay/gpu-perf.c
> +++ b/overlay/gpu-perf.c
> @@ -103,8 +103,15 @@ static int perf_tracepoint_open(struct gpu_perf *gp,
>  	n = gp->nr_cpus * (gp->nr_events+1);
>  	fd = realloc(gp->fd, n*sizeof(int));
>  	sample = realloc(gp->sample, n*sizeof(*gp->sample));
> -	if (fd == NULL || sample == NULL)
> +	if (fd == NULL || sample == NULL) {
> +		if (fd) {
> +			free(fd);
> +		}
> +		if (sample) {
> +			free(sample);
> +		}
>  		return ENOMEM;
> +	}
>  	gp->fd = fd;
>  	gp->sample = sample;
>  
> @@ -114,17 +121,25 @@ static int perf_tracepoint_open(struct gpu_perf *gp,
>  		uint64_t track[2];
>  
>  		fd[n] = perf_event_open(&attr, -1, n, -1, 0);
> -		if (fd[n] == -1)
> +		if (fd[n] == -1) {
> +			free(sample);
> +			free(fd);
>  			return errno;
> +		}
>  
>  		/* read back the event to establish id->tracepoint */
> -		if (read(fd[n], track, sizeof(track)) < 0)
> +		if (read(fd[n], track, sizeof(track)) < 0) {
> +			free(sample);
> +			free(fd);
>  			return errno;
> +		}
>  		sample[n].id = track[1];
>  		sample[n].func = func;
>  	}
>  
>  	gp->nr_events++;
> +	free(sample);
> +	free(fd);
>  	return 0;
>  }
>  
> diff --git a/tests/gem_render_linear_blits.c b/tests/gem_render_linear_blits.c
> index 13f76a5..c01ea39 100644
> --- a/tests/gem_render_linear_blits.c
> +++ b/tests/gem_render_linear_blits.c
> @@ -125,8 +125,11 @@ static void run_test (int fd, int count)
>  	for (i = 0; i < count; i++)
>  		check_bo(fd, bo[i]->handle, start_val[i]);
>  
> -	if (igt_run_in_simulation())
> +	if (igt_run_in_simulation()) {
> +		free(start_val);
> +		free(bo);
>  		return;
> +	}
>  
>  	igt_info("Cyclic blits, backward...\n");
>  	for (i = 0; i < count * 4; i++) {
> @@ -179,6 +182,8 @@ static void run_test (int fd, int count)
>  	}
>  	intel_batchbuffer_free(batch);
>  	drm_intel_bufmgr_destroy(bufmgr);
> +	free(start_val);
> +	free(bo);
>  }
>  
>  igt_main
> diff --git a/tests/gem_render_tiled_blits.c b/tests/gem_render_tiled_blits.c
> index fb2f39d..ca32b8f 100644
> --- a/tests/gem_render_tiled_blits.c
> +++ b/tests/gem_render_tiled_blits.c
> @@ -191,6 +191,8 @@ static void run_test (int fd, int count)
>  	}
>  	intel_batchbuffer_free(batch);
>  	drm_intel_bufmgr_destroy(bufmgr);
> +	free(start_val);
> +	free(buf);
>  }
>  
>  
> diff --git a/tests/gem_tiled_swapping.c b/tests/gem_tiled_swapping.c
> index b5849bc..d199ce1 100644
> --- a/tests/gem_tiled_swapping.c
> +++ b/tests/gem_tiled_swapping.c
> @@ -237,4 +237,5 @@ igt_main
>  	}
>  
>  	close(fd);
> +	free(threads);
>  }
> diff --git a/tests/kms_atomic.c b/tests/kms_atomic.c
> index f27ee46..d53a416 100644
> --- a/tests/kms_atomic.c
> +++ b/tests/kms_atomic.c
> @@ -628,6 +628,7 @@ static void crtc_commit_legacy(struct kms_atomic_crtc_state *crtc,
>  
>  	crtc_check_current_state(crtc, plane, relax);
>  	plane_check_current_state(plane, relax);
> +	free(connectors);
>  }
>  
>  static struct kms_atomic_crtc_state *find_crtc(struct kms_atomic_state *state,
> diff --git a/tests/kms_pipe_color.c b/tests/kms_pipe_color.c
> index 9f7ac7e..783925f 100644
> --- a/tests/kms_pipe_color.c
> +++ b/tests/kms_pipe_color.c
> @@ -646,6 +646,9 @@ static void test_pipe_legacy_gamma_reset(data_t *data,
>  		drmModeFreePropertyBlob(blob);
>  
>  		igt_output_set_pipe(output, PIPE_ANY);
> +		free(blue_lut);
> +		free(green_lut);
> +		free(red_lut);
>  	}
>  
>  	free(degamma_linear);
> diff --git a/tests/prime_self_import.c b/tests/prime_self_import.c
> index 992334d..b5673e5 100644
> --- a/tests/prime_self_import.c
> +++ b/tests/prime_self_import.c
> @@ -281,6 +281,7 @@ static void test_reimport_close_race(void)
>  	close(fake);
>  
>  	igt_assert_eq(obj_count, 0);
> +	free(threads);
>  }
>  
>  static void *thread_fn_export_vs_close(void *p)
> @@ -362,6 +363,7 @@ static void test_export_close_race(void)
>  	close(fake);
>  
>  	igt_assert_eq(obj_count, 0);
> +	free(threads);
>  }
>  
>  static void test_llseek_size(void)
> diff --git a/tools/intel_bios_dumper.c b/tools/intel_bios_dumper.c
> index 85bea97..50f2b10 100644
> --- a/tools/intel_bios_dumper.c
> +++ b/tools/intel_bios_dumper.c
> @@ -107,6 +107,7 @@ int main(int argc, char **argv)
>  
>  	close(fd);
>  	pci_system_cleanup();
> +	free(bios);
>  
>  	return 0;
>  }
> diff --git a/tools/intel_opregion_decode.c b/tools/intel_opregion_decode.c
> index c65828a..254e632 100644
> --- a/tools/intel_opregion_decode.c
> +++ b/tools/intel_opregion_decode.c
> @@ -428,6 +428,7 @@ int main(int argc, char *argv[])
>  			if (ret < 0) {
>  				printf("failed to read \"%s\": %s\n", filename,
>  				       strerror(errno));
> +				free(opregion);
>  				return 1;
>  			}
>  
> @@ -437,6 +438,8 @@ int main(int argc, char *argv[])
>  				opregion = realloc(opregion, finfo.st_size);
>  			}
>  		}
> +		decode_opregion(opregion, finfo.st_size);
> +		free(opregion);
>  	} else {
>  		opregion = mmap(NULL, finfo.st_size, PROT_READ, MAP_SHARED,
>  				fd, 0);
> @@ -445,9 +448,9 @@ int main(int argc, char *argv[])
>  			       strerror(errno));
>  			return 1;
>  		}
> +		decode_opregion(opregion, finfo.st_size);
> +		munmap(opregion, finfo.st_size);
>  	}
>  
> -	decode_opregion(opregion, finfo.st_size);
> -
>  	return 0;
>  }

-- 
Jani Nikula, Intel Open Source Technology Center


More information about the Intel-gfx mailing list