s390/xpram: don't modify module parameters
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Mon, 20 Jan 2014 15:43:33 +0000 (16:43 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 22 Jan 2014 13:02:15 +0000 (14:02 +0100)
During parsing of the sizes array the pointer to the particular
string is lost. Keep it by using an extra pointer to store the end
position of the parsed string. Keeping these parameters accessible
can be helpful for debugging purposes and for userspace reading
the parameters at runtime via sysfs. Also this will ensure that the
memory is freed at module unload time.

Reported-by: Michael Veigel <veigel@de.ibm.com>
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/block/xpram.c

index 464dd29d06c07dcbeb1e6ee96a439dbb037a25a9..58141f0651f280b4cc48b510f09455edf8b6cc0a 100644 (file)
@@ -257,6 +257,7 @@ static int __init xpram_setup_sizes(unsigned long pages)
        unsigned long mem_needed;
        unsigned long mem_auto;
        unsigned long long size;
+       char *sizes_end;
        int mem_auto_no;
        int i;
 
@@ -275,8 +276,8 @@ static int __init xpram_setup_sizes(unsigned long pages)
        mem_auto_no = 0;
        for (i = 0; i < xpram_devs; i++) {
                if (sizes[i]) {
-                       size = simple_strtoull(sizes[i], &sizes[i], 0);
-                       switch (sizes[i][0]) {
+                       size = simple_strtoull(sizes[i], &sizes_end, 0);
+                       switch (*sizes_end) {
                        case 'g':
                        case 'G':
                                size <<= 20;