anslcd_init() used ioremap() without checking for failure and then
called anslcd_write_byte_*() which dereference anslcd_ptr. Return
-ENOMEM if the mapping fails.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Linkai Gong <[email protected]>
---
 drivers/macintosh/ans-lcd.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/macintosh/ans-lcd.c b/drivers/macintosh/ans-lcd.c
index fa904b24a600..6ea7fb8666f7 100644
--- a/drivers/macintosh/ans-lcd.c
+++ b/drivers/macintosh/ans-lcd.c
@@ -168,9 +168,11 @@ anslcd_init(void)
        of_node_put(node);
 
        anslcd_ptr = ioremap(ANSLCD_ADDR, 0x20);
-       
+       if (!anslcd_ptr)
+               return -ENOMEM;
+
        retval = misc_register(&anslcd_dev);
-       if(retval < 0){
+       if (retval < 0) {
                printk(KERN_INFO "LCD: misc_register failed\n");
                iounmap(anslcd_ptr);
                return retval;
-- 
2.25.1


Reply via email to