[PATCH] add NULL short circuit to fb_dealloc_cmap()

STALE7750d

6 messages, 4 authors, 2005-07-26 · open the first message on its own page

[PATCH] add NULL short circuit to fb_dealloc_cmap()

From: Jesper Juhl <hidden>
Date: 2005-07-17 18:25:44

Resource freeing functions should generally be safe to call with NULL pointers.
Why?
 - there is some precedence in the kernel for this for deallocation functions.
 - removes the need for callers to check pointers for NULL.
 - space is saved overall by less code to test pointers for NULL all over the place.
 - removes possible NULL pointer dereferences when a caller forgot to check.

This patch makes  fb_dealloc_cmap()  safe to call with a NULL pointer argument.


Signed-off-by: Jesper Juhl <redacted>
---

 drivers/video/fbcmap.c |    3 +++
 1 files changed, 3 insertions(+)
--- linux-2.6.13-rc3-orig/drivers/video/fbcmap.c	2005-06-17 21:48:29.000000000 +0200
+++ linux-2.6.13-rc3/drivers/video/fbcmap.c	2005-07-17 20:33:43.000000000 +0200
@@ -130,6 +130,9 @@ fail:
 
 void fb_dealloc_cmap(struct fb_cmap *cmap)
 {
+	if (unlikely(!cmap))
+		return;
+
 	kfree(cmap->red);
 	kfree(cmap->green);
 	kfree(cmap->blue);

Re: [PATCH] add NULL short circuit to fb_dealloc_cmap()

From: Jon Smirl <hidden>
Date: 2005-07-17 20:22:51

On 7/17/05, Jesper Juhl [off-list ref] wrote:
Resource freeing functions should generally be safe to call with NULL pointers.
Why?
 - there is some precedence in the kernel for this for deallocation functions.
 - removes the need for callers to check pointers for NULL.
 - space is saved overall by less code to test pointers for NULL all over the place.
 - removes possible NULL pointer dereferences when a caller forgot to check.

This patch makes  fb_dealloc_cmap()  safe to call with a NULL pointer argument.
The fb cmap copde would be a lot simpler if it did everything with a
single allocation instead of five. Make a super cmap struct:

struct fb_super_cmap {
   struct fb_cmap cmap;
   __u16 red[255];
   __u16 blue[255];
   __u16 green[255];
   __u16 transp[255];
}

Then adjust the code as need. Have the embedded cmap struct point to
the fields in the super_cmap and the drivers don't have to be changed.




-- 
Jon Smirl
jonsmirl@gmail.com

Re: [PATCH] add NULL short circuit to fb_dealloc_cmap()

From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2005-07-17 21:15:03

On Sun, 17 Jul 2005, Jon Smirl wrote:
On 7/17/05, Jesper Juhl [off-list ref] wrote:
quoted
Resource freeing functions should generally be safe to call with NULL pointers.
Why?
 - there is some precedence in the kernel for this for deallocation functions.
 - removes the need for callers to check pointers for NULL.
 - space is saved overall by less code to test pointers for NULL all over the place.
 - removes possible NULL pointer dereferences when a caller forgot to check.

This patch makes  fb_dealloc_cmap()  safe to call with a NULL pointer argument.
The fb cmap copde would be a lot simpler if it did everything with a
single allocation instead of five. Make a super cmap struct:

struct fb_super_cmap {
   struct fb_cmap cmap;
   __u16 red[255];
   __u16 blue[255];
   __u16 green[255];
   __u16 transp[255];
                  ^^^
I assume you meant 256?
}

Then adjust the code as need. Have the embedded cmap struct point to
the fields in the super_cmap and the drivers don't have to be changed.
What if your colormap has more than 256 entries?

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds


-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click

Re: [PATCH] add NULL short circuit to fb_dealloc_cmap()

From: Jan Engelhardt <hidden>
Date: 2005-07-17 21:35:49

quoted
struct fb_super_cmap {
   struct fb_cmap cmap;
   __u16 red[255];
   __u16 blue[255];
   __u16 green[255];
   __u16 transp[255];
                 ^^^
I assume you meant 256?
Even if it really was 255, it should probably be made 256 to have things 
aligned <-- if that matters.


Jan Engelhardt
-- 

Re: [PATCH] add NULL short circuit to fb_dealloc_cmap()

From: Jon Smirl <hidden>
Date: 2005-07-17 22:32:13

On 7/17/05, Geert Uytterhoeven [off-list ref] wrote:
quoted
struct fb_super_cmap {
   struct fb_cmap cmap;
   __u16 red[255];
   __u16 blue[255];
   __u16 green[255];
   __u16 transp[255];
                  ^^^
I assume you meant 256?
quoted
}

Then adjust the code as need. Have the embedded cmap struct point to
the fields in the super_cmap and the drivers don't have to be changed.
What if your colormap has more than 256 entries?
I meant 256. Does any hardware exist that takes more that 256 entries? 
They are __u16 values but I have never seen hardware that take more
that __u8 either.

-- 
Jon Smirl
jonsmirl@gmail.com


-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id492&op=click

Re: [PATCH] add NULL short circuit to fb_dealloc_cmap()

From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2005-07-26 07:14:23

On Sun, 17 Jul 2005, Jon Smirl wrote:
On 7/17/05, Geert Uytterhoeven [off-list ref] wrote:
quoted
quoted
struct fb_super_cmap {
   struct fb_cmap cmap;
   __u16 red[255];
   __u16 blue[255];
   __u16 green[255];
   __u16 transp[255];
                  ^^^
I assume you meant 256?
quoted
}

Then adjust the code as need. Have the embedded cmap struct point to
the fields in the super_cmap and the drivers don't have to be changed.
What if your colormap has more than 256 entries?
I meant 256. Does any hardware exist that takes more that 256 entries? 
1024 was quite common on high-end graphics hardware.
They are __u16 values but I have never seen hardware that take more
that __u8 either.
10 bit was quite common on high-end graphics hardware.

IIRC, DEC TGA can do at least one of them.

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds


-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help