* [PATCH 1/5] ioremap balanced with iounmap for drivers/char/epca.c
@ 2006-10-06 4:57 Amol Lad
2006-10-06 20:35 ` Andrew Morton
0 siblings, 1 reply; 3+ messages in thread
From: Amol Lad @ 2006-10-06 4:57 UTC (permalink / raw)
To: linux kernel; +Cc: Andrew Morton
ioremap must be balanced by an iounmap and failing to do so can result
in a memory leak.
Tested (compilation only):
- using allmodconfig
- making sure the files are compiling without any warning/error due to
new changes
Signed-off-by: Amol Lad <amol@verismonetworks.com>
---
epca.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletion(-)
---
diff -uprN -X linux-2.6.19-rc1-orig/Documentation/dontdiff linux-2.6.19-rc1-orig/drivers/char/epca.c linux-2.6.19-rc1/drivers/char/epca.c
--- linux-2.6.19-rc1-orig/drivers/char/epca.c 2006-10-05 14:00:42.000000000 +0530
+++ linux-2.6.19-rc1/drivers/char/epca.c 2006-10-05 14:50:00.000000000 +0530
@@ -1474,8 +1474,11 @@ static void post_fep_init(unsigned int c
if ((bd->type == PCXEVE || bd->type == PCXE) && (readw(memaddr + XEPORTS) < 3))
shrinkmem = 1;
if (bd->type < PCIXEM)
- if (!request_region((int)bd->port, 4, board_desc[bd->type]))
+ if (!request_region((int)bd->port, 4, board_desc[bd->type])) {
+ iounmap(bd->re_map_membase);
+ bd->re_map_membase = NULL;
return;
+ }
memwinon(bd, 0);
/* --------------------------------------------------------------------
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/5] ioremap balanced with iounmap for drivers/char/epca.c
2006-10-06 4:57 [PATCH 1/5] ioremap balanced with iounmap for drivers/char/epca.c Amol Lad
@ 2006-10-06 20:35 ` Andrew Morton
2006-10-07 5:56 ` Amol Lad
0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2006-10-06 20:35 UTC (permalink / raw)
To: Amol Lad; +Cc: linux kernel
On Fri, 06 Oct 2006 10:27:05 +0530
Amol Lad <amol@verismonetworks.com> wrote:
> ioremap must be balanced by an iounmap and failing to do so can result
> in a memory leak.
>
> Tested (compilation only):
> - using allmodconfig
> - making sure the files are compiling without any warning/error due to
> new changes
>
> Signed-off-by: Amol Lad <amol@verismonetworks.com>
> ---
> epca.c | 5 ++++-
> 1 files changed, 4 insertions(+), 1 deletion(-)
> ---
> diff -uprN -X linux-2.6.19-rc1-orig/Documentation/dontdiff linux-2.6.19-rc1-orig/drivers/char/epca.c linux-2.6.19-rc1/drivers/char/epca.c
> --- linux-2.6.19-rc1-orig/drivers/char/epca.c 2006-10-05 14:00:42.000000000 +0530
> +++ linux-2.6.19-rc1/drivers/char/epca.c 2006-10-05 14:50:00.000000000 +0530
> @@ -1474,8 +1474,11 @@ static void post_fep_init(unsigned int c
> if ((bd->type == PCXEVE || bd->type == PCXE) && (readw(memaddr + XEPORTS) < 3))
> shrinkmem = 1;
> if (bd->type < PCIXEM)
> - if (!request_region((int)bd->port, 4, board_desc[bd->type]))
> + if (!request_region((int)bd->port, 4, board_desc[bd->type])) {
> + iounmap(bd->re_map_membase);
> + bd->re_map_membase = NULL;
> return;
> + }
> memwinon(bd, 0);
>
I think this will do the wrong thing if (bd->type >= PCIXEM). Maybe it's
OK, but it's not immediately obvious from a quick reading.
I'm quite worried about changes in crufty old drivers like these - if we
break them, the breakage will take a *long* time to be discovered. Too
late for us to fix them.
Plus a lot of them are just plain badly coded, so extra care is needed to
understand the tricks which they're playing.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/5] ioremap balanced with iounmap for drivers/char/epca.c
2006-10-06 20:35 ` Andrew Morton
@ 2006-10-07 5:56 ` Amol Lad
0 siblings, 0 replies; 3+ messages in thread
From: Amol Lad @ 2006-10-07 5:56 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux kernel
On Fri, 2006-10-06 at 13:35 -0700, Andrew Morton wrote:
> On Fri, 06 Oct 2006 10:27:05 +0530
> Amol Lad <amol@verismonetworks.com> wrote:
>
> > ioremap must be balanced by an iounmap and failing to do so can result
> > in a memory leak.
> >
> > Tested (compilation only):
> > - using allmodconfig
> > - making sure the files are compiling without any warning/error due to
> > new changes
> >
> > Signed-off-by: Amol Lad <amol@verismonetworks.com>
> > ---
> > epca.c | 5 ++++-
> > 1 files changed, 4 insertions(+), 1 deletion(-)
> > ---
> > diff -uprN -X linux-2.6.19-rc1-orig/Documentation/dontdiff linux-2.6.19-rc1-orig/drivers/char/epca.c linux-2.6.19-rc1/drivers/char/epca.c
> > --- linux-2.6.19-rc1-orig/drivers/char/epca.c 2006-10-05 14:00:42.000000000 +0530
> > +++ linux-2.6.19-rc1/drivers/char/epca.c 2006-10-05 14:50:00.000000000 +0530
> > @@ -1474,8 +1474,11 @@ static void post_fep_init(unsigned int c
> > if ((bd->type == PCXEVE || bd->type == PCXE) && (readw(memaddr + XEPORTS) < 3))
> > shrinkmem = 1;
> > if (bd->type < PCIXEM)
> > - if (!request_region((int)bd->port, 4, board_desc[bd->type]))
> > + if (!request_region((int)bd->port, 4, board_desc[bd->type])) {
> > + iounmap(bd->re_map_membase);
> > + bd->re_map_membase = NULL;
> > return;
> > + }
> > memwinon(bd, 0);
> >
>
> I think this will do the wrong thing if (bd->type >= PCIXEM). Maybe it's
> OK, but it's not immediately obvious from a quick reading.
A laymans thought here. As ioremap was done for bd->type < PCIXEM, so
iounmap should also be done for the same case.
But as you see the function is void and not handling errors, so this
change can have side effects... well.. it can misbehave even without
this change in the failure case..
>
> Plus a lot of them are just plain badly coded, so extra care is needed to
> understand the tricks which they're playing.
I think module owner should take responsibility for this. One more
example of badly coded driver is drivers/char/cyclades.c. I was not at
all able to do ioremap balance with iounmap for this one.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-10-07 5:53 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-06 4:57 [PATCH 1/5] ioremap balanced with iounmap for drivers/char/epca.c Amol Lad
2006-10-06 20:35 ` Andrew Morton
2006-10-07 5:56 ` Amol Lad
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox