Cheng Shao pushed to branch wip/terrorjack/asan at Glasgow Haskell Compiler / GHC

Commits:

2 changed files:

Changes:

  • rts/Task.c
    ... ... @@ -183,6 +183,7 @@ freeTask (Task *task)
    183 183
             stgFree(incall);
    
    184 184
         }
    
    185 185
         for (incall = task->spare_incalls; incall != NULL; incall = next) {
    
    186
    +        __ghc_asan_unpoison_memory_region(incall, sizeof(InCall));
    
    186 187
             next = incall->next;
    
    187 188
             stgFree(incall);
    
    188 189
         }
    
    ... ... @@ -252,6 +253,7 @@ newInCall (Task *task)
    252 253
     
    
    253 254
         if (task->spare_incalls != NULL) {
    
    254 255
             incall = task->spare_incalls;
    
    256
    +        __ghc_asan_unpoison_memory_region(incall, sizeof(InCall));
    
    255 257
             task->spare_incalls = incall->next;
    
    256 258
             task->n_spare_incalls--;
    
    257 259
         } else {
    
    ... ... @@ -283,6 +285,7 @@ endInCall (Task *task)
    283 285
             stgFree(incall);
    
    284 286
         } else {
    
    285 287
             incall->next = task->spare_incalls;
    
    288
    +        __ghc_asan_poison_memory_region(incall, sizeof(InCall));
    
    286 289
             task->spare_incalls = incall;
    
    287 290
             task->n_spare_incalls++;
    
    288 291
         }
    

  • rts/sm/BlockAlloc.c
    ... ... @@ -261,6 +261,8 @@ initGroup(bdescr *head)
    261 261
           head[i].flags = 0;
    
    262 262
       }
    
    263 263
     #endif
    
    264
    +
    
    265
    +  __ghc_asan_unpoison_memory_region(head->start, (W_)head->blocks * BLOCK_SIZE);
    
    264 266
     }
    
    265 267
     
    
    266 268
     #if SIZEOF_VOID_P == SIZEOF_LONG
    
    ... ... @@ -1052,6 +1054,8 @@ freeGroup(bdescr *p)
    1052 1054
       setup_tail(p);
    
    1053 1055
       free_list_insert(node,p);
    
    1054 1056
     
    
    1057
    +  __ghc_asan_poison_memory_region(p->start, (W_)p->blocks * BLOCK_SIZE);
    
    1058
    +
    
    1055 1059
       IF_DEBUG(sanity, checkFreeListSanity());
    
    1056 1060
     }
    
    1057 1061