From: "Randy.Dunlap" <rddunlap@osdl.org>
From: Leann Ogasawara <ogasawara@osdl.org>
Handle kmalloc() failures
if (!len)
return 0;
if (!(cmap->red = kmalloc(size, GFP_ATOMIC)))
- return -1;
+ goto fail;
if (!(cmap->green = kmalloc(size, GFP_ATOMIC)))
- return -1;
+ goto fail;
if (!(cmap->blue = kmalloc(size, GFP_ATOMIC)))
- return -1;
+ goto fail;
if (transp) {
if (!(cmap->transp = kmalloc(size, GFP_ATOMIC)))
- return -1;
+ goto fail;
} else
cmap->transp = NULL;
}
cmap->len = len;
fb_copy_cmap(fb_default_cmap(len), cmap, 0);
return 0;
+
+fail:
+ fb_dealloc_cmap(cmap);
+ return -1;
}
/**
void fb_dealloc_cmap(struct fb_cmap *cmap)
{
- if (cmap->red)
- kfree(cmap->red);
- if (cmap->green)
- kfree(cmap->green);
- if (cmap->blue)
- kfree(cmap->blue);
- if (cmap->transp)
- kfree(cmap->transp);
+ kfree(cmap->red);
+ kfree(cmap->green);
+ kfree(cmap->blue);
+ kfree(cmap->transp);
cmap->red = cmap->green = cmap->blue = cmap->transp = NULL;
cmap->len = 0;