]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-osi-probe-avoid-out-of-range-memory-reads-20061006
authorChaskiel M Grundman <cg2v@andrew.cmu.edu>
Fri, 6 Oct 2006 15:01:19 +0000 (15:01 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 6 Oct 2006 15:01:19 +0000 (15:01 +0000)
FIXES 41858

avoid oops on opteron due to accessing unmapped memory

(cherry picked from commit e39f4d87896c451afb8c38705de4c12fd3940182)

src/afs/LINUX/osi_probe.c

index 20acb39e103bf45935fbc212339bf604810ce413..d70235d768032f2b9dd032e826133fc6e34922b4 100644 (file)
@@ -1009,6 +1009,12 @@ static void *try(probectl *P, tryctl *T, PROBETYPE *aptr,
 #else
        ptr = aptr;
 #endif
+       if ((unsigned long)ptr < init_mm.start_code ||
+               (unsigned long)ptr > init_mm.end_data) {
+/*          printk("address 0x%lx (from 0x%lx %d) is out of range in check_table. wtf?\n", (unsigned long)x, (unsigned long)ptr, i);*/
+            continue;
+       }
+
        ret = check_table(P, ptr);
        if (ret >= 0) {
            /* return value is number of entries to skip */
@@ -1113,6 +1119,11 @@ static void *try_harder(probectl *P, PROBETYPE *ptr, unsigned long datalen)
        printk("<7>osi_probe: %s                      try_harder\n", P->symbol);
 #endif
     for (offset = 0; offset < datalen; offset++, ptr++) {
+       if ((unsigned long)ptr < init_mm.start_code ||
+               (unsigned long)ptr > init_mm.end_data) {
+/*          printk("address 0x%lx (from 0x%lx %d) is out of range in check_table. wtf?\n", (unsigned long)x, (unsigned long)ptr, i);*/
+            continue;
+       }
        ret = check_table(P, ptr);
         if (ret >= 0) {
             /* return value is number of entries to skip */