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