DEVEL15-amd64-better-range-checking-20061108
authorJeffrey Hutzelman <jhutz@cmu.edu>
Wed, 8 Nov 2006 18:57:45 +0000 (18:57 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 8 Nov 2006 18:57:45 +0000 (18:57 +0000)
FIXES 44198

check entire mapped space

(cherry picked from commit 9ea216fc9837eb6922ce365aa3eedafdb8564d94)

src/afs/LINUX/osi_probe.c

index d70235d..06364ca 100644 (file)
@@ -1010,7 +1010,12 @@ static void *try(probectl *P, tryctl *T, PROBETYPE *aptr,
        ptr = aptr;
 #endif
        if ((unsigned long)ptr < init_mm.start_code ||
-               (unsigned long)ptr > init_mm.end_data) {
+#if defined(AFS_AMD64_LINUX20_ENV)
+               (unsigned long)ptr > init_mm.brk)
+#else
+               (unsigned long)ptr > init_mm.end_data)
+#endif
+       {
 /*          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;
        }
@@ -1119,8 +1124,13 @@ 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) {
+        if ((unsigned long)ptr < init_mm.start_code ||
+#if defined(AFS_AMD64_LINUX20_ENV)
+               (unsigned long)ptr > init_mm.brk)
+#else
+               (unsigned long)ptr > init_mm.end_data)
+#endif
+       {
 /*          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;
        }