)]}'
{
  "commit": "0e4a135aebc7686286d87e286499ce55e5bd5aad",
  "tree": "6c3acb14c24e6302f1ee8bd3e57497fd7aa5f643",
  "parents": [
    "603a0c40d414ea12509fc45f2b930449a8d4aad2"
  ],
  "author": {
    "name": "James Hilliard",
    "email": "james.hilliard1@gmail.com",
    "time": "Mon Oct 26 12:11:27 2026 -0600"
  },
  "committer": {
    "name": "Jakub Kicinski",
    "email": "kuba@kernel.org",
    "time": "Fri Oct 30 16:15:57 2026 -0700"
  },
  "message": "ptp: drain virtual clock sysfs operations before unregistering children\n\nParent clock removal walks its virtual clocks before removing the\nn_vclocks sysfs attribute. The mutex taken by ptp_vclock_in_use() is\nreleased before that walk, so a concurrent sysfs deletion can pick the\nsame child and unregister and free its ptp_vclock a second time. A\nreference held by the device iterator does not protect that separately\nallocated virtual clock.\n\nRemove n_vclocks before walking the children. Removing the attribute\nprevents new stores and drains stores already running, without holding\nn_vclocks_mux across a callback that needs that mutex. Skip virtual\nclocks, which do not have this attribute.\n\nThis race was found by code inspection of virtual-clock registration\nfailure cleanup and parent removal.\n\nFixes: bfcbb76b0f59 (\"ptp: unregister virtual clocks when unregistering physical clock.\")\nReviewed-by: Vadim Fedorenko \u003cvadim.fedorenko@linux.dev\u003e\nSigned-off-by: James Hilliard \u003cjames.hilliard1@gmail.com\u003e\nLink: https://patch.msgid.link/20261026-ptp-vclock-sampling-v6-1-e705612541f1@gmail.com\nSigned-off-by: Jakub Kicinski \u003ckuba@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4111342d64f03d54e74c1e6a1e47320fc7d46940",
      "old_mode": 33188,
      "old_path": "drivers/ptp/ptp_clock.c",
      "new_id": "47ffc773065a3196883f156ceb6fe0b2f9eb8e80",
      "new_mode": 33188,
      "new_path": "drivers/ptp/ptp_clock.c"
    },
    {
      "type": "modify",
      "old_id": "db4039d642b41c6b9de2fc109ba4c26d28ee97b0",
      "old_mode": 33188,
      "old_path": "drivers/ptp/ptp_private.h",
      "new_id": "ec8633126d6b89a394275f5e6088fbc85b01e7f6",
      "new_mode": 33188,
      "new_path": "drivers/ptp/ptp_private.h"
    },
    {
      "type": "modify",
      "old_id": "7d09256aca7242ee8364e926baf8e18da6a1c1b2",
      "old_mode": 33188,
      "old_path": "drivers/ptp/ptp_sysfs.c",
      "new_id": "1b4530be42a205fd4ad22db7f253d82612096c70",
      "new_mode": 33188,
      "new_path": "drivers/ptp/ptp_sysfs.c"
    }
  ]
}
