)]}'
{
  "commit": "f4272dd5b0ef82680f02152168b8ec19f6048f12",
  "tree": "438b2d7f68e6be4852b5c866503a0ca1c09dfa57",
  "parents": [
    "4079a1c1f02525415bea11cdaf804fb7635c7de8"
  ],
  "author": {
    "name": "Mitch Phillips",
    "email": "31459023+hctim@users.noreply.github.com",
    "time": "Wed Jan 11 12:55:38 2023 -0800"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Wed Jan 11 13:15:28 2023 -0800"
  },
  "message": "[GWP-ASan] Add recoverable mode.\n\nThe GWP-ASan recoverable mode allows a process to continue to function\nafter a GWP-ASan error is detected. The error will continue to be\ndumped, but GWP-ASan now has APIs that a signal handler (like the\nexample optional crash handler) can call in order to allow the\ncontinuation of a process.\n\nWhen an error occurs with an allocation, the slot used for that\nallocation will be permanently disabled. This means that free() of that\npointer is a no-op, and use-after-frees will succeed (writing and\nreading the data present in the page).\n\nFor heap-buffer-overflow/underflow, the guard page is marked as accessible\nand buffer-overflows will succeed (writing and reading the data present\nin the now-accessible guard page). This does impact adjacent\nallocations, buffer-underflow and buffer-overflows from adjacent\nallocations will no longer touch an inaccessible guard page. This could\nbe improved in future by having two guard pages between each adjacent\nallocation, but that\u0027s out of scope of this patch.\n\nEach allocation only ever has a single error report generated. It\u0027s\nwhatever came first between invalid-free, double-free, use-after-free or\nheap-buffer-overflow, but only one.\n\nReviewed By: eugenis, fmayer\n\nDifferential Revision: https://reviews.llvm.org/D140173\n\nGitOrigin-RevId: 90a9beb7cc9755791caa23dfc4e36bc544e98ed3\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b0f6c58bf4967995ad9d386054ed079d0814e69f",
      "old_mode": 33188,
      "old_path": "common.cpp",
      "new_id": "790a331aa66cade078b9113b3a66f3a66ffcdb22",
      "new_mode": 33188,
      "new_path": "common.cpp"
    },
    {
      "type": "modify",
      "old_id": "6b238ad9ecbdce72fe6e02b20acdda29fca006e8",
      "old_mode": 33188,
      "old_path": "common.h",
      "new_id": "df451021d341204d943019b3eb8dbffcd020ba72",
      "new_mode": 33188,
      "new_path": "common.h"
    },
    {
      "type": "modify",
      "old_id": "48f54e2e912e9dc1958c613528ca76b3ccb6529f",
      "old_mode": 33188,
      "old_path": "crash_handler.cpp",
      "new_id": "555365c6e6f4d27eb6c041691a4a4eecdd057989",
      "new_mode": 33188,
      "new_path": "crash_handler.cpp"
    },
    {
      "type": "modify",
      "old_id": "4a95069dac5851ce50c78718ff195f7b00bc7d70",
      "old_mode": 33188,
      "old_path": "crash_handler.h",
      "new_id": "1ff60edea47df1fbb8bc0835f962fbc07832c571",
      "new_mode": 33188,
      "new_path": "crash_handler.h"
    },
    {
      "type": "modify",
      "old_id": "7096b428764cc42177062e3a72dda765685496f5",
      "old_mode": 33188,
      "old_path": "guarded_pool_allocator.cpp",
      "new_id": "9017ab7cf7ac052bb638c0b1f5de3d409bfa30d0",
      "new_mode": 33188,
      "new_path": "guarded_pool_allocator.cpp"
    },
    {
      "type": "modify",
      "old_id": "6d2ce2576c1367d5392f980e012f460b8711f3a5",
      "old_mode": 33188,
      "old_path": "guarded_pool_allocator.h",
      "new_id": "de07b6798c19c6b4866063e432c6a0c96b04147f",
      "new_mode": 33188,
      "new_path": "guarded_pool_allocator.h"
    },
    {
      "type": "modify",
      "old_id": "87d9fe1dff17c1c0d0b62085324d70ee61a95500",
      "old_mode": 33188,
      "old_path": "optional/segv_handler.h",
      "new_id": "72105ded7d55a54b39349947cdbef667d0cf7117",
      "new_mode": 33188,
      "new_path": "optional/segv_handler.h"
    },
    {
      "type": "modify",
      "old_id": "966d7d0bd9962cd4b419635d5be2e697345c0f61",
      "old_mode": 33188,
      "old_path": "optional/segv_handler_fuchsia.cpp",
      "new_id": "f5ff35e27ac20cdb0c35bbcc8a356e420148fbb9",
      "new_mode": 33188,
      "new_path": "optional/segv_handler_fuchsia.cpp"
    },
    {
      "type": "modify",
      "old_id": "b3e72c96400018440eb87f955acee2cc5d3247f4",
      "old_mode": 33188,
      "old_path": "optional/segv_handler_posix.cpp",
      "new_id": "e012963bffd893b05015ec500706b128c25a4817",
      "new_mode": 33188,
      "new_path": "optional/segv_handler_posix.cpp"
    },
    {
      "type": "modify",
      "old_id": "9900a2ac40df100279bb303c0b7e39afff7aece9",
      "old_mode": 33188,
      "old_path": "options.inc",
      "new_id": "3a593216e8dfcd02afb6d42b5d475c127e62f9df",
      "new_mode": 33188,
      "new_path": "options.inc"
    },
    {
      "type": "modify",
      "old_id": "a4eb8eb9b214d28323c79efd777c5106dcecfcdb",
      "old_mode": 33188,
      "old_path": "tests/backtrace.cpp",
      "new_id": "4dccda815e8df102612e22490fe1d198aadf7ad4",
      "new_mode": 33188,
      "new_path": "tests/backtrace.cpp"
    },
    {
      "type": "modify",
      "old_id": "4cdb5694842f9069e19219f9792f866c2befb401",
      "old_mode": 33188,
      "old_path": "tests/crash_handler_api.cpp",
      "new_id": "598b7b8789295e2cd113dc3b677e3d9b080f7d3c",
      "new_mode": 33188,
      "new_path": "tests/crash_handler_api.cpp"
    },
    {
      "type": "modify",
      "old_id": "ed91e642de70ea25a12bf642db96f3270c978dfb",
      "old_mode": 33188,
      "old_path": "tests/harness.h",
      "new_id": "2c8187ca873f8b8f7e611a95d37f066cc12df6f5",
      "new_mode": 33188,
      "new_path": "tests/harness.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4ca7eb5c8cf678b71c438007f2a1fd97a94d41b0",
      "new_mode": 33188,
      "new_path": "tests/recoverable.cpp"
    }
  ]
}
