)]}'
{
  "commit": "903dbefc2b6918c10d12d9aafa0168cee8d287c7",
  "tree": "618a00b8c77ce2f3a0eed4833081f3dbf2d27dc4",
  "parents": [
    "0b5ad31d2a997c9b80e7e24aafce7f079fc67bbd"
  ],
  "author": {
    "name": "Peter Maydell",
    "email": "peter.maydell@linaro.org",
    "time": "Tue Sep 12 15:04:23 2023 +0100"
  },
  "committer": {
    "name": "Peter Maydell",
    "email": "peter.maydell@linaro.org",
    "time": "Thu Sep 21 16:07:13 2023 +0100"
  },
  "message": "target/arm: Don\u0027t skip MTE checks for LDRT/STRT at EL0\n\nThe LDRT/STRT \"unprivileged load/store\" instructions behave like\nnormal ones if executed at EL0. We handle this correctly for\nthe load/store semantics, but get the MTE checking wrong.\n\nWe always look at s-\u003emte_active[is_unpriv] to see whether we should\nbe doing MTE checks, but in hflags.c when we set the TB flags that\nwill be used to fill the mte_active[] array we only set the\nMTE0_ACTIVE bit if UNPRIV is true (i.e.  we are not at EL0).\n\nThis means that a LDRT at EL0 will see s-\u003emte_active[1] as 0,\nand will not do MTE checks even when MTE is enabled.\n\nTo avoid the translate-time code having to do an explicit check on\ns-\u003eunpriv to see if it is OK to index into the mte_active[] array,\nduplicate MTE_ACTIVE into MTE0_ACTIVE when UNPRIV is false.\n\n(This isn\u0027t a very serious bug because generally nobody executes\nLDRT/STRT at EL0, because they have no use there.)\n\nCc: qemu-stable@nongnu.org\nSigned-off-by: Peter Maydell \u003cpeter.maydell@linaro.org\u003e\nReviewed-by: Richard Henderson \u003crichard.henderson@linaro.org\u003e\nMessage-id: 20230912140434.1333369-2-peter.maydell@linaro.org\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "616c5fa7237f08da1f7c65e78ab9c3ecee77c77b",
      "old_mode": 33188,
      "old_path": "target/arm/tcg/hflags.c",
      "new_id": "ea642384f5aeec2e0befe4cb854ed11ee6ea8730",
      "new_mode": 33188,
      "new_path": "target/arm/tcg/hflags.c"
    }
  ]
}
