)]}'
{
  "commit": "4dfdee23989224860d5ca897350863dd222736a3",
  "tree": "4dfb030d5aeea7431dbf0e1f51e8874629da571a",
  "parents": [
    "f74a725028d5a1fd87b920630f1e00668133a178"
  ],
  "author": {
    "name": "Fuad Tabba",
    "email": "fuad.tabba@linux.dev",
    "time": "Fri Jul 03 02:46:14 2026 +0100"
  },
  "committer": {
    "name": "Fuad Tabba",
    "email": "fuad.tabba@linux.dev",
    "time": "Tue Aug 11 15:38:16 2026 +0100"
  },
  "message": "KVM: arm64: Tag host-VA hypercall parameters __kern\n\nThe nVHE hypervisor takes host virtual addresses as hypercall arguments\nand translates each with kern_hyp_va() before use. Nothing marks them as\nhost-owned, so dereferencing one untranslated at EL2 - a recurring bug\nclass - is invisible to the compiler.\n\nAdd a __kern sparse address space, active only for EL2 code, and tag the\nhost-VA parameters in the hypercall declarations. kern_hyp_va_host() is\nthe only sanctioned unwrap: it translates the address, preserves the\npointee type (stripped of qualifiers, as with the percpu accessors) and\ndrops the tag with a __force cast, so an untranslated host VA fails\nsparse. The tag flows from the shared declaration into the generated\nhandler and on into the donated-memory and tracing-descriptor helpers,\nso a handler cannot extract a host VA without it. Host code sees plain\npointers, and the tag is checker-only: no code is generated.\n\ncontainer_of() casts through void * and drops the address space, so\n__get_host_hyp_vcpus() now takes an already translated vCPU and its\ncallers unwrap. Translating a vgic_v3_cpu_if before taking its container\nis equivalent, since va_mask spans every bit in which two linear-map\naddresses differ.\n\nReviewed-by: Marc Zyngier \u003cmaz@kernel.org\u003e\nSigned-off-by: Fuad Tabba \u003cfuad.tabba@linux.dev\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c709991d10cda86b6b36b222085894fdd1e931f0",
      "old_mode": 33188,
      "old_path": "arch/arm64/include/asm/kvm_hcall.h",
      "new_id": "9f06af58a4b0053b9ed8a63375678b7f4e847ff0",
      "new_mode": 33188,
      "new_path": "arch/arm64/include/asm/kvm_hcall.h"
    },
    {
      "type": "modify",
      "old_id": "6eae7e7e2a68450100e30990bafe73e2310d6ea3",
      "old_mode": 33188,
      "old_path": "arch/arm64/include/asm/kvm_mmu.h",
      "new_id": "57f65257bb56d8f03578dbddafaee37ad39d4f79",
      "new_mode": 33188,
      "new_path": "arch/arm64/include/asm/kvm_mmu.h"
    },
    {
      "type": "modify",
      "old_id": "2643a1a8196681e1e1bbd1c4d653120d5c568cf0",
      "old_mode": 33188,
      "old_path": "arch/arm64/kvm/hyp/include/nvhe/pkvm.h",
      "new_id": "c1171451e1be71adef308482315be64e562c47c8",
      "new_mode": 33188,
      "new_path": "arch/arm64/kvm/hyp/include/nvhe/pkvm.h"
    },
    {
      "type": "modify",
      "old_id": "4aa36fd76b9e296b995a4aeb8c80c3c05736fb7e",
      "old_mode": 33188,
      "old_path": "arch/arm64/kvm/hyp/include/nvhe/trace.h",
      "new_id": "c2db9f70ea265ae45c9bc0c5f47c2bcb0f2187d6",
      "new_mode": 33188,
      "new_path": "arch/arm64/kvm/hyp/include/nvhe/trace.h"
    },
    {
      "type": "modify",
      "old_id": "b145cce721a060c91396537ee0cb29f3ec687683",
      "old_mode": 33188,
      "old_path": "arch/arm64/kvm/hyp/nvhe/hyp-main.c",
      "new_id": "a3f4128f875334717eae8c93ee4afe0d6da0375d",
      "new_mode": 33188,
      "new_path": "arch/arm64/kvm/hyp/nvhe/hyp-main.c"
    },
    {
      "type": "modify",
      "old_id": "6c8e33ebf8bb64f363ba90c5c4d218912bf64f08",
      "old_mode": 33188,
      "old_path": "arch/arm64/kvm/hyp/nvhe/pkvm.c",
      "new_id": "5cdb0318fa7ba160ba2916c699f22ca31be2ff6f",
      "new_mode": 33188,
      "new_path": "arch/arm64/kvm/hyp/nvhe/pkvm.c"
    },
    {
      "type": "modify",
      "old_id": "eaa63b06a286c99f30c7280d164800f991817834",
      "old_mode": 33188,
      "old_path": "arch/arm64/kvm/hyp/nvhe/trace.c",
      "new_id": "47680a949f61f5bc9af23d6938e354d8dbd7937e",
      "new_mode": 33188,
      "new_path": "arch/arm64/kvm/hyp/nvhe/trace.c"
    }
  ]
}
