* [Linux-ia64] [PATCH] pfm_smpl_buffer_alloc needs to free vma on error
@ 2002-08-30 1:33 Kingsley Cheung
2002-08-30 2:12 ` Stephane Eranian
0 siblings, 1 reply; 2+ messages in thread
From: Kingsley Cheung @ 2002-08-30 1:33 UTC (permalink / raw)
To: linux-ia64
Hi David,
In 2.4.19, arch/ia64/kernel/perfmon.c, I noticed that
pfm_smpl_buffer_alloc doesn't seem to be freeing the vma structure it
allocates if there's an error. Here's a trivial patch to fix it:
--- arch/ia64/kernel/perfmon.c 5 Jul 2002 06:17:29 -0000 1.1.7.1
+++ arch/ia64/kernel/perfmon.c 29 Aug 2002 23:29:06 -0000
@@ -647,15 +647,14 @@
psb = kmalloc(sizeof(*psb), GFP_KERNEL);
if (psb = NULL) {
DBprintk(("Can't allocate sampling buffer descriptor\n"));
- pfm_rvfree(smpl_buf, size);
- return -ENOMEM;
+ goto kmalloc_fail;
}
/* allocate vma */
vma = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
if (!vma) {
DBprintk(("Cannot allocate vma\n"));
- goto error;
+ goto kmem_cache_alloc_fail;
}
/*
* partially initialize the vma for the sampling buffer
@@ -750,9 +749,12 @@
return 0;
-error:
- pfm_rvfree(smpl_buf, size);
+ error:
+ kmem_cache_free(vm_area_cachep, vma);
+ kmem_cache_alloc_fail:
kfree(psb);
+ kmalloc_fail:
+ pfm_rvfree(smpl_buf, size);
return -ENOMEM;
}
The patch compiles but it hasn't been tested.
Cheers,
Kingsley
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Linux-ia64] [PATCH] pfm_smpl_buffer_alloc needs to free vma on error
2002-08-30 1:33 [Linux-ia64] [PATCH] pfm_smpl_buffer_alloc needs to free vma on error Kingsley Cheung
@ 2002-08-30 2:12 ` Stephane Eranian
0 siblings, 0 replies; 2+ messages in thread
From: Stephane Eranian @ 2002-08-30 2:12 UTC (permalink / raw)
To: linux-ia64
[-- Attachment #1: Type: text/plain, Size: 500 bytes --]
On Fri, Aug 30, 2002 at 11:33:17AM +1000, Kingsley Cheung wrote:
> Hi David,
>
> In 2.4.19, arch/ia64/kernel/perfmon.c, I noticed that
> pfm_smpl_buffer_alloc doesn't seem to be freeing the vma structure it
> allocates if there's an error. Here's a trivial patch to fix it:
>
Yes, you are right. I have generated a similar patch with the labels slightly
renamed. Note that the patch also fixes another problem with read_unlock()
in the same function.
Thanks for spotting this.
--
-Stephane
[-- Attachment #2: perfmon-020829 --]
[-- Type: text/plain, Size: 1091 bytes --]
--- linux.2419/arch/ia64/kernel/perfmon.c.old Wed Aug 28 12:14:22 2002
+++ linux.2419/arch/ia64/kernel/perfmon.c Thu Aug 29 19:08:02 2002
@@ -767,15 +767,14 @@
psb = kmalloc(sizeof(*psb), GFP_KERNEL);
if (psb == NULL) {
DBprintk(("Can't allocate sampling buffer descriptor\n"));
- pfm_rvfree(smpl_buf, size);
- return -ENOMEM;
+ goto error_kmalloc;
}
/* allocate vma */
vma = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
if (!vma) {
DBprintk(("Cannot allocate vma\n"));
- goto error;
+ goto error_kmem;
}
/*
* partially initialize the vma for the sampling buffer
@@ -875,8 +874,11 @@
return 0;
error:
- pfm_rvfree(smpl_buf, size);
+ kmem_cache_free(vm_area_cachep, vma);
+error_kmem:
kfree(psb);
+error_kmalloc:
+ pfm_rvfree(smpl_buf, size);
return -ENOMEM;
}
@@ -1057,7 +1059,10 @@
/*
* check if we can send this task a signal
*/
- if (pfm_bad_permissions(notify_task)) goto buffer_error;
+ if (pfm_bad_permissions(notify_task)) {
+ read_unlock(&tasklist_lock);
+ goto buffer_error;
+ }
/*
* make visible
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2002-08-30 2:12 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-08-30 1:33 [Linux-ia64] [PATCH] pfm_smpl_buffer_alloc needs to free vma on error Kingsley Cheung
2002-08-30 2:12 ` Stephane Eranian
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox