Staging: android: ram_console: Disable ECC when early init is enabled and validate...
authorArve Hjønnevåg <arve@android.com>
Sat, 31 Jan 2009 04:21:09 +0000 (20:21 -0800)
committerGreg Kroah-Hartman <gregkh@kvm.kroah.org>
Mon, 9 Feb 2009 19:26:18 +0000 (11:26 -0800)
Signed-off-by: Arve Hjønnevåg <arve@android.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/android/Kconfig
drivers/staging/android/ram_console.c

index 6b996db..604bd1e 100644 (file)
@@ -27,6 +27,7 @@ menuconfig ANDROID_RAM_CONSOLE_ERROR_CORRECTION
        bool "Android RAM Console Enable error correction"
        default n
        depends on ANDROID_RAM_CONSOLE
+       depends on !ANDROID_RAM_CONSOLE_EARLY_INIT
        select REED_SOLOMON
        select REED_SOLOMON_ENC8
        select REED_SOLOMON_DEC8
index bf00685..643ac5c 100644 (file)
@@ -224,9 +224,23 @@ static int __init ram_console_init(struct ram_console_buffer *buffer,
        ram_console_buffer_size =
                buffer_size - sizeof(struct ram_console_buffer);
 
+       if (ram_console_buffer_size > buffer_size) {
+               pr_err("ram_console: buffer %p, invalid size %d, datasize %d\n",
+                      buffer, buffer_size, ram_console_buffer_size);
+               return 0;
+       }
+
 #ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
        ram_console_buffer_size -= (DIV_ROUND_UP(ram_console_buffer_size,
                                                ECC_BLOCK_SIZE) + 1) * ECC_SIZE;
+
+       if (ram_console_buffer_size > buffer_size) {
+               pr_err("ram_console: buffer %p, invalid size %d, "
+                      "non-ecc datasize %d\n",
+                      buffer, buffer_size, ram_console_buffer_size);
+               return 0;
+       }
+
        ram_console_par_buffer = buffer->data + ram_console_buffer_size;