From: tixy@yxit.co.uk (Tixy)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/2] ARM: dma-mapping: fix leak in consistent_init
Date: Sat, 18 Feb 2012 15:58:33 +0000 [thread overview]
Message-ID: <1329580713.2448.17.camel@computer2.home> (raw)
In-Reply-To: <1329484195-26361-1-git-send-email-ajeet.yadav.77@gmail.com>
On Fri, 2012-02-17 at 18:39 +0530, Ajeet Yadav wrote:
> Although the error in this case is unlikely, but logically
> if error occurs then we leak memory.
>
> Signed-off-by: Ajeet Yadav <ajeet.yadav.77@gmail.com>
If you want to fix all the memory leaks then the page tables allocated
by pte_alloc_kernel() need freeing as well, (and the pud and pmd
tables?).
However, if we run out of memory this early in boot, then the system is
unusable anyway and it doesn't seem worth adding the extra code
complexity to avoid any of these memory leaks.
--
Tixy
> ---
> arch/arm/mm/dma-mapping.c | 24 ++++++++++++------------
> 1 files changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
> index 04bfa76..b8cf062 100644
> --- a/arch/arm/mm/dma-mapping.c
> +++ b/arch/arm/mm/dma-mapping.c
> @@ -161,7 +161,6 @@ static struct arm_vmregion_head consistent_head = {
> */
> static int __init consistent_init(void)
> {
> - int ret = 0;
> pgd_t *pgd;
> pud_t *pud;
> pmd_t *pmd;
> @@ -171,7 +170,7 @@ static int __init consistent_init(void)
> unsigned long num_ptes = (CONSISTENT_END - base) >> PMD_SHIFT;
>
> consistent_pte = kmalloc(num_ptes * sizeof(pte_t *), GFP_KERNEL);
> - if (!consistent_pte) {
> + if (unlikely(!consistent_pte)) {
> pr_err("%s: no memory\n", __func__);
> return -ENOMEM;
> }
> @@ -183,32 +182,33 @@ static int __init consistent_init(void)
> pgd = pgd_offset(&init_mm, base);
>
> pud = pud_alloc(&init_mm, pgd, base);
> - if (!pud) {
> + if (unlikely(!pud)) {
> printk(KERN_ERR "%s: no pud tables\n", __func__);
> - ret = -ENOMEM;
> - break;
> + goto err;
> }
>
> pmd = pmd_alloc(&init_mm, pud, base);
> - if (!pmd) {
> + if (unlikely(!pmd)) {
> printk(KERN_ERR "%s: no pmd tables\n", __func__);
> - ret = -ENOMEM;
> - break;
> + goto err;
> }
> WARN_ON(!pmd_none(*pmd));
>
> pte = pte_alloc_kernel(pmd, base);
> - if (!pte) {
> + if (unlikely(!pte)) {
> printk(KERN_ERR "%s: no pte tables\n", __func__);
> - ret = -ENOMEM;
> - break;
> + goto err;
> }
>
> consistent_pte[i++] = pte;
> base += PMD_SIZE;
> } while (base < CONSISTENT_END);
>
> - return ret;
> + return 0;
> +err:
> + kfree(consistent_pte);
> + consistent_pte = NULL;
> + return -ENOMEM;
> }
>
> core_initcall(consistent_init);
next prev parent reply other threads:[~2012-02-18 15:58 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-17 13:09 [PATCH 2/2] ARM: dma-mapping: fix leak in consistent_init Ajeet Yadav
2012-02-17 13:12 ` Russell King - ARM Linux
2012-02-17 13:28 ` Ajeet Yadav
2012-02-18 15:58 ` Tixy [this message]
[not found] ` <CAB4K4y5CV_MuEegiQuYn=_JN7zwxF11b4_kPvQVFS-V6mBwQmg@mail.gmail.com>
2012-02-20 19:08 ` Tixy
-- strict thread matches above, loose matches on Subject: below --
2012-02-17 13:27 Ajeet Yadav
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1329580713.2448.17.camel@computer2.home \
--to=tixy@yxit.co.uk \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).