aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Khoroshilov <khoroshilov@ispras.ru>2016-05-02 22:22:27 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2016-05-10 04:58:29 -0400
commit524edf3877775c46e8b3ba56f9dd75d07914392c (patch)
tree8c4e34211850a802e8243842ab15971d455ce564
parent18b6562c243f3a4be91a7a240090ebefccf39761 (diff)
fbdev: fbmem: implement error handling in fbmem_init()
fbmem_init() ignores all errors, while fbmem_exit() does not check if deallocating resources are valid. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r--drivers/video/fbdev/core/fbmem.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 4e73b6f6b1c0..76c1ad96fb37 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -1854,17 +1854,31 @@ EXPORT_SYMBOL(fb_set_suspend);
1854static int __init 1854static int __init
1855fbmem_init(void) 1855fbmem_init(void)
1856{ 1856{
1857 proc_create("fb", 0, NULL, &fb_proc_fops); 1857 int ret;
1858
1859 if (!proc_create("fb", 0, NULL, &fb_proc_fops))
1860 return -ENOMEM;
1858 1861
1859 if (register_chrdev(FB_MAJOR,"fb",&fb_fops)) 1862 ret = register_chrdev(FB_MAJOR, "fb", &fb_fops);
1863 if (ret) {
1860 printk("unable to get major %d for fb devs\n", FB_MAJOR); 1864 printk("unable to get major %d for fb devs\n", FB_MAJOR);
1865 goto err_chrdev;
1866 }
1861 1867
1862 fb_class = class_create(THIS_MODULE, "graphics"); 1868 fb_class = class_create(THIS_MODULE, "graphics");
1863 if (IS_ERR(fb_class)) { 1869 if (IS_ERR(fb_class)) {
1864 printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class)); 1870 ret = PTR_ERR(fb_class);
1871 pr_warn("Unable to create fb class; errno = %d\n", ret);
1865 fb_class = NULL; 1872 fb_class = NULL;
1873 goto err_class;
1866 } 1874 }
1867 return 0; 1875 return 0;
1876
1877err_class:
1878 unregister_chrdev(FB_MAJOR, "fb");
1879err_chrdev:
1880 remove_proc_entry("fb", NULL);
1881 return ret;
1868} 1882}
1869 1883
1870#ifdef MODULE 1884#ifdef MODULE