1
linux/drivers/video
Jesper Juhl 0b75f2dfa2 backlight: Fix cr_bllcd allocations and error paths
After fixing the too small memory allocation in cr_backlight_probe()
from drivers/video/backlight/cr_bllcd.c
(commit e3bbb3f053) I noticed that the
Coverity checker also thought there were a few memory leaks in there.
I took a closer look and confirmed that there were indeed several
leaks.

At the start of the function we allocate storage for a
'struct cr_panel' and store the pointer in a variable named 'crp'.

Then we call pci_get_device() and pci_read_config_byte() and if
either of them fail we return without freeing the memory allocated
for the 'struct cr_panel'. These two leaks are easy to fix since we
don't even use 'crp' for anything up to this point, so I simply
moved the allocation further down in the function so it only happens
just before we actually need it.

A bit further down we call backlight_device_register() and store the
result in 'crp->cr_backlight_device'. In case of error we return
'crp->cr_backlight_device' from the function, thus leaking 'crp'
itself. The same thing happens with the call to lcd_device_register().
To fix these two leaks I declare two new pointers to hold the return
values, so that in case of error we can return the pointer (as before)
but without leaking 'crp'.

This version of the patch also adds missing
backlight_device_unregister() / lcd_device_unregister() / pci_dev_put()
calls to error paths.
  Thanks to Richard Purdie <rpurdie@rpsys.net> for noticing.

Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
2007-10-11 22:24:12 +01:00
..
aty radeonfb: fix chip definition for Radeon Xpress 200M 0x5975 2007-09-13 08:00:42 -07:00
backlight backlight: Fix cr_bllcd allocations and error paths 2007-10-11 22:24:12 +01:00
console Fix font dependency for SGI Newport console driver 2007-08-31 01:42:22 -07:00
display make drivers/video/display/display-sysfs.c:display_class static 2007-05-08 11:15:26 -07:00
geode lxfb: GEODE: Add framebuffer support for the AMD Geode LX 2007-07-31 15:39:37 -07:00
i810 i810fb: the pseudo_palette is only 16 elements long 2007-07-17 10:23:12 -07:00
intelfb intelfb: Fix bug in DPLL disable 2007-09-19 11:24:18 -07:00
kyro PCI: Change all drivers to use pci_device->revision 2007-07-11 16:02:10 -07:00
logo Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild 2007-07-19 14:28:19 -07:00
matrox matroxfb: rectify jitter (G450/G550) 2007-08-11 15:47:40 -07:00
mbx [PATCH] mark struct file_operations const 6 2007-02-12 09:48:45 -08:00
nvidia Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight 2007-07-22 11:19:46 -07:00
omap OMAP: LCD panel support for the Siemens SX1 mobile phone 2007-07-17 10:23:15 -07:00
pnx4008 [PATCH] pnx4008:fix NULL dereference in rgbfb 2006-11-16 11:43:37 -08:00
riva Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight 2007-07-22 11:19:46 -07:00
savage some kmalloc/memset ->kzalloc (tree wide) 2007-07-19 10:04:50 -07:00
sis sisfb: fix pseudo_palette array size and overrun 2007-07-17 10:23:13 -07:00
vermilion vmlfb: framebuffer driver for Intel Vermilion Range 2007-05-08 11:15:32 -07:00
68328fb.c 68328fb: the pseudo_palette is only 16 elements long 2007-07-17 10:23:11 -07:00
acornfb.c Remove the arm26 port 2007-07-31 15:39:39 -07:00
acornfb.h
amba-clcd.c some kmalloc/memset ->kzalloc (tree wide) 2007-07-19 10:04:50 -07:00
amifb.c [PATCH] fbdev: remove references to non-existent fbmon_valid_timings() 2006-12-13 09:05:55 -08:00
arcfb.c arcfb: use fb_sys_read() 2007-05-08 11:15:30 -07:00
arkfb.c vt8623fb: arkfb: null pointer dereference fix 2007-06-01 08:18:28 -07:00
asiliantfb.c
atafb_iplan2p2.c m68k: Atari fb revival 2007-05-04 17:59:05 -07:00
atafb_iplan2p4.c m68k: Atari fb revival 2007-05-04 17:59:05 -07:00
atafb_iplan2p8.c m68k: Atari fb revival 2007-05-04 17:59:05 -07:00
atafb_mfb.c m68k: Atari fb revival 2007-05-04 17:59:05 -07:00
atafb_utils.h m68k: Atari fb revival 2007-05-04 17:59:05 -07:00
atafb.c m68k: Atari fb revival 2007-05-04 17:59:05 -07:00
atafb.h m68k: Atari fb revival 2007-05-04 17:59:05 -07:00
atmel_lcdfb.c atmel_lcdfb: use spare bits in 32bpp mode as alpha channel 2007-07-21 17:49:17 -07:00
au1100fb.c au1100fb: move au1100fb_fb_blank() beforce au1100fb_setmode() 2007-08-22 19:52:47 -07:00
au1100fb.h [PATCH] au11oofb: fix to remove flickering 2006-12-08 08:29:06 -08:00
au1200fb.c some kmalloc/memset ->kzalloc (tree wide) 2007-07-19 10:04:50 -07:00
au1200fb.h
bt431.h
bt455.h
bw2.c [VIDEO]: Do not prom_halt() in cg3 and bw2 device probe. 2007-08-26 18:49:08 -07:00
c2p.c
c2p.h
cfbcopyarea.c fbdev: consolidate common drawing functions into a header file 2007-05-08 11:15:30 -07:00
cfbfillrect.c fbdev: consolidate common drawing functions into a header file 2007-05-08 11:15:30 -07:00
cfbimgblt.c [PATCH] various fbdev files: mark structs and array read-only 2006-12-08 08:29:05 -08:00
cg3.c [VIDEO]: Do not prom_halt() in cg3 and bw2 device probe. 2007-08-26 18:49:08 -07:00
cg6.c [CG6]: fix memory size detection 2007-08-03 14:08:26 -07:00
cg14.c [VIDEO]: Fix OOPS in all SBUS framebuffer drivers. 2007-07-30 00:27:33 -07:00
chipsfb.c chipsfb: use correct pm state 2007-07-26 11:35:18 -07:00
cirrusfb.c cirrusfb: convert to generic boolean 2007-05-08 11:15:28 -07:00
clps711xfb.c some kmalloc/memset ->kzalloc (tree wide) 2007-07-19 10:04:50 -07:00
controlfb.c controlfb: the pseudo_palette is only 16 elements long 2007-07-17 10:23:11 -07:00
controlfb.h
cyber2000fb.c some kmalloc/memset ->kzalloc (tree wide) 2007-07-19 10:04:50 -07:00
cyber2000fb.h
cyblafb.c cyblafb: fix pseudo_palette array overrun in setcolreg 2007-07-17 10:23:12 -07:00
dnfb.c
edid.h
epson1355fb.c fb: epson1355fb: kill off dead sh support 2007-07-17 10:23:13 -07:00
fb_ddc.c Fix generic fb_ddc i2c edid probe msg 2006-11-16 22:18:28 -08:00
fb_defio.c fbdev: kill sparse warning in deferred IO 2007-05-08 11:15:29 -07:00
fb_draw.h fbdev: consolidate common drawing functions into a header file 2007-05-08 11:15:30 -07:00
fb_notify.c
fb_sys_fops.c fbdev: add fb_read/fb_write functions for framebuffers in system RAM 2007-05-08 11:15:30 -07:00
fbcmap.c [PATCH] fbcmap.c: mark structs const or __read_mostly 2006-12-08 08:29:05 -08:00
fbcvt.c [PATCH] various fbdev files: mark structs and array read-only 2006-12-08 08:29:05 -08:00
fbmem.c fbdev: Fix logo if logo depth is less than framebuffer depth 2007-07-31 15:39:37 -07:00
fbmon.c fbdev: add Ultrasharp UXGA to broken monitor database 2007-05-08 11:15:26 -07:00
fbsysfs.c fbdev: fix obvious bug in show_pan() 2007-05-08 11:15:26 -07:00
ffb.c [VIDEO]: Fix OOPS in all SBUS framebuffer drivers. 2007-07-30 00:27:33 -07:00
fm2fb.c fm2fb: the pseudo_palette is only 16 elements long 2007-07-17 10:23:12 -07:00
g364fb.c PCI: Cleanup the includes of <linux/pci.h> 2007-05-02 19:02:35 -07:00
gbefb.c gbefb: the pseudo_palette is only 16 elements long 2007-07-17 10:23:12 -07:00
gxt4500.c [PATCH] gxt4500: Fix colormap and PLL setting, support GXT6000P 2006-12-22 08:55:50 -08:00
hecubafb.c hecubafb: use fb_sys_read() 2007-05-08 11:15:30 -07:00
hgafb.c
hitfb.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
hpfb.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
igafb.c [SPARC]: Fix serial console device detection. 2007-07-20 16:59:26 -07:00
imacfb.c
imsttfb.c Check for PPC32 in imsttfb 2007-08-22 19:52:47 -07:00
imxfb.c imxfb: fix memory hole 2007-05-23 20:14:13 -07:00
imxfb.h
Kconfig remove tx3912fb 2007-07-31 15:39:41 -07:00
leo.c [VIDEO]: Fix OOPS in all SBUS framebuffer drivers. 2007-07-30 00:27:33 -07:00
macfb.c macfb: fix pseudo_palette size and overrun 2007-07-17 10:23:12 -07:00
macmodes.c drivers/video/macmodes.c:mac_find_mode() mustn't be __devinit 2007-07-17 10:23:13 -07:00
macmodes.h drivers/video/macmodes.c:mac_find_mode() mustn't be __devinit 2007-07-17 10:23:13 -07:00
Makefile remove tx3912fb 2007-07-31 15:39:41 -07:00
maxinefb.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
modedb.c VIDEO: add spaces on either side of the case "..." operator 2007-05-08 11:15:28 -07:00
neofb.c neofb: Fix pseudo_palette array overrun in neofb_setcolreg 2007-05-31 07:48:27 -07:00
offb.c offb: the pseudo_palette is only 16 elements long 2007-07-17 10:23:12 -07:00
output.c output: Add display output class support 2006-12-20 01:46:41 -05:00
p9100.c [VIDEO]: Fix OOPS in all SBUS framebuffer drivers. 2007-07-30 00:27:33 -07:00
platinumfb.c platinumfb: the pseudo_palette is only 16 elements long 2007-07-17 10:23:12 -07:00
platinumfb.h
pm2fb.c pm2fb: white spaces clean up 2007-07-17 10:23:11 -07:00
pm3fb.c pm3fb: possible cleanups 2007-07-17 10:23:13 -07:00
pmag-aa-fb.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
pmag-ba-fb.c [TC] mips: pmag-ba-fb: Convert to the driver model 2007-02-09 16:23:17 +00:00
pmagb-b-fb.c [TC] pmagb-b-fb: Convert to the driver model 2007-02-09 16:23:18 +00:00
ps3fb.c ps3fb: Set FBINFO_READS_FAST to speed up text console scrolling 2007-07-21 17:49:16 -07:00
pvr2fb.c pvr2fb: Consolidated cleanup of pvr2fb.c 2007-08-11 15:47:40 -07:00
pxafb.c [ARM] 4544/1: arm: fix section mismatch in pxa fb 2007-08-11 23:58:24 +01:00
pxafb.h
q40fb.c q40fb: the pseudo_palette is only 16 elements long 2007-07-17 10:23:12 -07:00
s1d13xxxfb.c
s3c2410fb.c s3c2410fb: fix s3c2410 compilation 2007-07-31 15:39:37 -07:00
s3c2410fb.h s3c2410fb: fix s3c2410 compilation 2007-07-31 15:39:37 -07:00
s3fb.c svgalib: move fb_get_caps to svgalib 2007-05-09 12:30:57 -07:00
sa1100fb.c [ARM] 4035/1: fix collie compilation 2006-12-17 23:37:47 +00:00
sa1100fb.h [PATCH] Replace regular code with appropriate calls to container_of() 2007-02-11 11:18:06 -08:00
sbuslib.c [SPARC]: Mark SBUS framebuffer ioctls as IGNORE in compat_ioctl.c 2007-07-30 00:27:36 -07:00
sbuslib.h
sgivwfb.c sgivwfb: the pseudo_palette is only 16 elements long 2007-07-17 10:23:12 -07:00
skeletonfb.c skeletonfb: fix of xxxfb_setup ifdef 2007-06-01 08:18:28 -07:00
sm501fb.c sm501fb printk warning fixes 2007-05-08 11:15:34 -07:00
sstfb.c PCI: Change all drivers to use pci_device->revision 2007-07-11 16:02:10 -07:00
sticore.h
stifb.c stifb: detect cards in double buffer mode more reliably 2007-08-11 15:47:40 -07:00
sunxvr500.c [VIDEO] sunxvr500fb: Fix pseudo_palette array size 2007-06-05 13:15:26 -07:00
sunxvr2500.c [VIDEO] sunxvr2500fb: Fix pseudo_palette array size 2007-06-05 13:15:01 -07:00
svgalib.c svgalib: move fb_get_caps to svgalib 2007-05-09 12:30:57 -07:00
syscopyarea.c fbdev: consolidate common drawing functions into a header file 2007-05-08 11:15:30 -07:00
sysfillrect.c fbdev: consolidate common drawing functions into a header file 2007-05-08 11:15:30 -07:00
sysimgblt.c fbdev: add drawing functions for framebuffers in system RAM 2007-05-08 11:15:30 -07:00
tcx.c [VIDEO]: Fix OOPS in all SBUS framebuffer drivers. 2007-07-30 00:27:33 -07:00
tdfxfb.c
tgafb.c drivers/ misc __iomem annotations 2007-07-26 11:11:57 -07:00
tridentfb.c tridentfb: fix pseudo_palette array overrun in setcolreg 2007-07-17 10:23:12 -07:00
valkyriefb.c some kmalloc/memset ->kzalloc (tree wide) 2007-07-19 10:04:50 -07:00
valkyriefb.h
vesafb.c [PATCH] annotate some variables in vesafb driver as __read_mostly 2006-12-08 08:29:06 -08:00
vfb.c vfb: use fb_sys_read() and fb_sys_write() 2007-05-08 11:15:30 -07:00
vga16fb.c vga16fb: actually support widths in multiples of 8 2007-05-08 11:15:33 -07:00
vgastate.c vga: vgastate fix 2007-05-08 11:15:32 -07:00
vt8623fb.c vt8623fb.c: make code static 2007-07-17 10:23:13 -07:00
w100fb.c w100fb: fix compile warnings 2007-05-23 20:14:13 -07:00
w100fb.h
xilinxfb.c xilinxfb: Don't bail if the xilinxfb platform device doesn't have any pdata 2007-07-31 15:39:37 -07:00