)]}'
{
  "commit": "66ea7cb72f9e45e268c2032a8d2b106775eebb99",
  "tree": "6e28fc26448be93545d9d514ed979fe223a22d62",
  "parents": [
    "e7ca2ca510cc5c2ec3c0c739b2b0f43561f40b77"
  ],
  "author": {
    "name": "Dmitry Torokhov",
    "email": "dmitry.torokhov@gmail.com",
    "time": "Sun Aug 30 13:52:47 2026 -0700"
  },
  "committer": {
    "name": "Dmitry Torokhov",
    "email": "dmitry.torokhov@gmail.com",
    "time": "Sun Sep 20 12:52:09 2026 -0700"
  },
  "message": "Input: gscps2 - use RCU for ps2port_list and manage it in open/close\n\nManaging ps2port_list in gscps2_probe() and gscps2_remove() had two\nissues:\n\n- in gscps2_remove(), serio_unregister_port() frees the serio port, but\n  because the port remained in ps2port_list until later in remove, a\n  shared interrupt firing on another CPU could traverse ps2port_list and\n  dereference the freed serio port\n\n- ps2port_list additions and deletions in probe/remove raced locklessly\n  against list traversals in gscps2_interrupt().\n\nConvert ps2port_list traversal in gscps2_interrupt() to use RCU, and\nmove list management to gscps2_open() and gscps2_close(). When\nserio_unregister_port() runs during device removal, serio_close() is\ninvoked, cleanly taking the port out of ps2port_list before the serio\nstructure is destroyed, while maintaining active hardware communication\nduring child driver disconnect.\n\nReported-by: sashiko-bot@kernel.org\nAssisted-by: LLM\nLink: https://patch.msgid.link/20260830-gscps2-v1-2-c733d4cae7f9@gmail.com\nAcked-by: Helge Deller \u003cdeller@gmx.de\u003e\nTested-by: Helge Deller \u003cdeller@gmx.de\u003e\nSigned-off-by: Dmitry Torokhov \u003cdmitry.torokhov@gmail.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b82c56ba8ff70d054fc02497330aa51a30ad3cab",
      "old_mode": 33188,
      "old_path": "drivers/input/serio/gscps2.c",
      "new_id": "5b6e311f8a02c7764a66040d16df6a272f1ce4d5",
      "new_mode": 33188,
      "new_path": "drivers/input/serio/gscps2.c"
    }
  ]
}
