asan5_fail.go 328 B

123456789101112131415161718192021
  1. package main
  2. import (
  3. "fmt"
  4. "runtime"
  5. "unsafe"
  6. )
  7. func main() {
  8. p := new([1024 * 1000]int)
  9. p[0] = 10
  10. r := bar(&p[1024*1000-1])
  11. fmt.Printf("r value is %d", r)
  12. }
  13. func bar(a *int) int {
  14. p := unsafe.Add(unsafe.Pointer(a), 2*unsafe.Sizeof(int(1)))
  15. runtime.ASanWrite(p, 8) // BOOM
  16. *((*int)(p)) = 10
  17. return *((*int)(p))
  18. }