diff options
| author | Dave Jones <davej@redhat.com> | 2007-01-28 17:39:19 -0500 |
|---|---|---|
| committer | Dave Jones <davej@redhat.com> | 2007-01-28 17:39:19 -0500 |
| commit | c30efbaeaa9297fb1a35ef952350e0c2bb7a3d47 (patch) | |
| tree | 66d369f957a04845883929662cb3d1151ece8923 | |
| parent | 4b95320fc4d21b0ff2f8604305dd6c851aff6096 (diff) | |
[AGPGART] Prevent (unlikely) memory leak in amd_create_gatt_pages()
If we fail an alloc, unwind the previous allocs that succeeded.
Spotted-by: Alan Grimes <agrimes@speakeasy.net>
Signed-off-by: Dave Jones <davej@redhat.com>
| -rw-r--r-- | drivers/char/agp/amd-k7-agp.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c index 51d0d562d0..c85c8cadb6 100644 --- a/drivers/char/agp/amd-k7-agp.c +++ b/drivers/char/agp/amd-k7-agp.c | |||
| @@ -101,6 +101,11 @@ static int amd_create_gatt_pages(int nr_tables) | |||
| 101 | for (i = 0; i < nr_tables; i++) { | 101 | for (i = 0; i < nr_tables; i++) { |
| 102 | entry = kzalloc(sizeof(struct amd_page_map), GFP_KERNEL); | 102 | entry = kzalloc(sizeof(struct amd_page_map), GFP_KERNEL); |
| 103 | if (entry == NULL) { | 103 | if (entry == NULL) { |
| 104 | while (i > 0) { | ||
| 105 | kfree(tables[i-1]); | ||
| 106 | i--; | ||
| 107 | } | ||
| 108 | kfree(tables); | ||
| 104 | retval = -ENOMEM; | 109 | retval = -ENOMEM; |
| 105 | break; | 110 | break; |
| 106 | } | 111 | } |
