Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1335541 > unrolled thread

[PATCH] devm_memremap_release: fix memremap'd addr handling

Started byToshi Kani <toshi.kani@hpe.com>
First post2016-02-16 16:40 +0100
Last post2016-02-17 01:50 +0100
Articles 4 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] devm_memremap_release: fix memremap'd addr handling Toshi Kani <toshi.kani@hpe.com> - 2016-02-16 16:40 +0100
    Re: [PATCH] devm_memremap_release: fix memremap'd addr handling Andrew Morton <akpm@linux-foundation.org> - 2016-02-17 01:20 +0100
      Re: [PATCH] devm_memremap_release: fix memremap'd addr handling Toshi Kani <toshi.kani@hpe.com> - 2016-02-17 01:30 +0100
    Re: [PATCH] devm_memremap_release: fix memremap'd addr handling Dan Williams <dan.j.williams@intel.com> - 2016-02-17 01:50 +0100

#1335541 — [PATCH] devm_memremap_release: fix memremap'd addr handling

FromToshi Kani <toshi.kani@hpe.com>
Date2016-02-16 16:40 +0100
Subject[PATCH] devm_memremap_release: fix memremap'd addr handling
Message-ID<r2PTl-1fi-33@gated-at.bofh.it>
The pmem driver calls devm_memremap() to map a persistent memory
range.  When the pmem driver is unloaded, this memremap'd range
is not released.

Fix devm_memremap_release() to handle a given memremap'd address
properly.

Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 kernel/memremap.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/memremap.c b/kernel/memremap.c
index 2c468de..7a1b5c3 100644
--- a/kernel/memremap.c
+++ b/kernel/memremap.c
@@ -114,7 +114,7 @@ EXPORT_SYMBOL(memunmap);
 
 static void devm_memremap_release(struct device *dev, void *res)
 {
-	memunmap(res);
+	memunmap(*(void **)res);
 }
 
 static int devm_memremap_match(struct device *dev, void *res, void *match_data)

[toc] | [next] | [standalone]


#1335948

FromAndrew Morton <akpm@linux-foundation.org>
Date2016-02-17 01:20 +0100
Message-ID<r2Y0y-6P7-19@gated-at.bofh.it>
In reply to#1335541
On Tue, 16 Feb 2016 09:30:27 -0700 Toshi Kani <toshi.kani@hpe.com> wrote:

> The pmem driver calls devm_memremap() to map a persistent memory
> range.  When the pmem driver is unloaded, this memremap'd range
> is not released.
> 
> Fix devm_memremap_release() to handle a given memremap'd address
> properly.
> 
> ...
>
> --- a/kernel/memremap.c
> +++ b/kernel/memremap.c
> @@ -114,7 +114,7 @@ EXPORT_SYMBOL(memunmap);
>  
>  static void devm_memremap_release(struct device *dev, void *res)
>  {
> -	memunmap(res);
> +	memunmap(*(void **)res);
>  }
>  

Huh.  So what happens?  memunmap() decides it isn't a vmalloc address
and we leak a vma?

I'll add a cc:stable to this.

[toc] | [prev] | [next] | [standalone]


#1335952

FromToshi Kani <toshi.kani@hpe.com>
Date2016-02-17 01:30 +0100
Message-ID<r2Yae-6Sl-7@gated-at.bofh.it>
In reply to#1335948
On Tue, 2016-02-16 at 16:18 -0800, Andrew Morton wrote:
> On Tue, 16 Feb 2016 09:30:27 -0700 Toshi Kani <toshi.kani@hpe.com> wrote:
> 
> > The pmem driver calls devm_memremap() to map a persistent memory
> > range.  When the pmem driver is unloaded, this memremap'd range
> > is not released.
> > 
> > Fix devm_memremap_release() to handle a given memremap'd address
> > properly.
> > 
> > ...
> > 
> > --- a/kernel/memremap.c
> > +++ b/kernel/memremap.c
> > @@ -114,7 +114,7 @@ EXPORT_SYMBOL(memunmap);
> >  
> >  static void devm_memremap_release(struct device *dev, void *res)
> >  {
> > -	memunmap(res);
> > +	memunmap(*(void **)res);
> >  }
> >  
> 
> Huh.  So what happens?  memunmap() decides it isn't a vmalloc address
> and we leak a vma?

Yes, that's right.

> I'll add a cc:stable to this.

Agreed.

Thanks!
-Toshi

[toc] | [prev] | [next] | [standalone]


#1335965

FromDan Williams <dan.j.williams@intel.com>
Date2016-02-17 01:50 +0100
Message-ID<r2YtA-70p-9@gated-at.bofh.it>
In reply to#1335541
On Tue, Feb 16, 2016 at 8:30 AM, Toshi Kani <toshi.kani@hpe.com> wrote:
> The pmem driver calls devm_memremap() to map a persistent memory
> range.  When the pmem driver is unloaded, this memremap'd range
> is not released.
>
> Fix devm_memremap_release() to handle a given memremap'd address
> properly.
>
> Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
> Cc: Dan Williams <dan.j.williams@intel.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> ---
>  kernel/memremap.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/memremap.c b/kernel/memremap.c
> index 2c468de..7a1b5c3 100644
> --- a/kernel/memremap.c
> +++ b/kernel/memremap.c
> @@ -114,7 +114,7 @@ EXPORT_SYMBOL(memunmap);
>
>  static void devm_memremap_release(struct device *dev, void *res)
>  {
> -       memunmap(res);
> +       memunmap(*(void **)res);
>  }

Ugh, yup.  Thanks Toshi!

Acked-by: Dan Williams <dan.j.williams@intel.com>

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web