In the implementation of __gup_benchmark_ioctl() the allocated pages should be released before returning in case of an invalid cmd. Release pages via kvfree() by goto done. Fixes: 714a3a1ebafe ("mm/gup_benchmark.c: add additional pinning methods") Signed-off-by: Navid Emamdoost <navid.emamdoost@xxxxxxxxx> --- Changes in v2: -- added goto and ret value instead of return -1. --- mm/gup_benchmark.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mm/gup_benchmark.c b/mm/gup_benchmark.c index b160638f647e..b773b2568544 100644 --- a/mm/gup_benchmark.c +++ b/mm/gup_benchmark.c @@ -24,7 +24,7 @@ static int __gup_benchmark_ioctl(unsigned int cmd, { ktime_t start_time, end_time; unsigned long i, nr_pages, addr, next; - int nr; + int nr, ret = 0; struct page **pages; if (gup->size > ULONG_MAX) @@ -63,8 +63,8 @@ static int __gup_benchmark_ioctl(unsigned int cmd, NULL); break; default: - kvfree(pages); - return -1; + ret = -EINVAL; + goto done; } if (nr <= 0) @@ -85,8 +85,9 @@ static int __gup_benchmark_ioctl(unsigned int cmd, end_time = ktime_get(); gup->put_delta_usec = ktime_us_delta(end_time, start_time); +done: kvfree(pages); - return 0; + return ret; } static long gup_benchmark_ioctl(struct file *filep, unsigned int cmd, -- 2.17.1