1673dc3d4SNico Weber // Make sure the zones created by malloc_create_zone() are write-protected.
2673dc3d4SNico Weber #include <malloc/malloc.h>
3673dc3d4SNico Weber #include <stdio.h>
4673dc3d4SNico Weber 
5673dc3d4SNico Weber // RUN: %clangxx_asan %s -o %t
6*e2bcc33bSDan Liew // RUN: ASAN_OPTIONS="abort_on_error=1" not --crash %run %t 2>&1 | FileCheck %s
7673dc3d4SNico Weber 
8673dc3d4SNico Weber 
pwn(malloc_zone_t * unused_zone,size_t unused_size)9673dc3d4SNico Weber void *pwn(malloc_zone_t *unused_zone, size_t unused_size) {
10673dc3d4SNico Weber   printf("PWNED\n");
11673dc3d4SNico Weber   return NULL;
12673dc3d4SNico Weber }
13673dc3d4SNico Weber 
main()14673dc3d4SNico Weber int main() {
15673dc3d4SNico Weber   malloc_zone_t *zone = malloc_create_zone(0, 0);
16673dc3d4SNico Weber   zone->malloc = pwn;
17673dc3d4SNico Weber   void *v = malloc_zone_malloc(zone, 1);
18673dc3d4SNico Weber   // CHECK-NOT: PWNED
19673dc3d4SNico Weber   return 0;
20673dc3d4SNico Weber }
21