)]}'
{
  "commit": "0c2ed186bbe14304415476d6707b747dddcd8583",
  "tree": "43372833160bacec5a138bc39547d10e8c8295c6",
  "parents": [
    "95fc02722edde02946d0d475221f2b2054d3d8ba"
  ],
  "author": {
    "name": "Cen Zhang",
    "email": "zzzccc427@gmail.com",
    "time": "Mon Jul 06 23:24:18 2026 +0800"
  },
  "committer": {
    "name": "Johannes Berg",
    "email": "johannes.berg@intel.com",
    "time": "Tue Jul 07 09:27:42 2026 +0200"
  },
  "message": "wifi: cfg80211: use wiphy work for socket owner autodisconnect\n\nnl80211_netlink_notify() walks the cfg80211 wireless device list when a\nNETLINK_GENERIC socket is released. If the socket owns a connection, the\nnotifier queues the embedded wdev-\u003edisconnect_wk work item.\n\nThat work is a plain work_struct today. NETDEV_GOING_DOWN cancels it, but a\nNETLINK_URELEASE notifier that already observed conn_owner_nlportid can\nqueue it after that cancel returns. _cfg80211_unregister_wdev() then\nremoves the wdev from the list and waits for RCU readers, but\nsynchronize_net() does not drain work queued by such a reader.\n\nMake the autodisconnect work a wiphy_work instead. The callback already\nneeds the wiphy mutex, and wiphy_work runs under that mutex. This lets\nteardown cancel pending autodisconnect work while holding the mutex,\nwithout a cancel_work_sync() vs. worker locking concern.\n\nAlso cancel the wiphy work after list_del_rcu() and synchronize_net(). Any\nNETLINK_URELEASE notifier that had already reached the wdev list has then\neither queued the work and it is removed, or can no longer find the wdev.\n\nFixes: bd2522b16884 (\"cfg80211: NL80211_ATTR_SOCKET_OWNER support for CMD_CONNECT\")\nSuggested-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nAssisted-by: Codex:gpt-5.5\nSigned-off-by: Cen Zhang \u003czzzccc427@gmail.com\u003e\nLink: https://patch.msgid.link/20260706152418.779226-1-zzzccc427@gmail.com\nSigned-off-by: Johannes Berg \u003cjohannes.berg@intel.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3751a1d74765ab98cb9244ab61b414873334f708",
      "old_mode": 33188,
      "old_path": "include/net/cfg80211.h",
      "new_id": "f5abf1db7558bcb9d7654e5c60f0bf02ae2380bc",
      "new_mode": 33188,
      "new_path": "include/net/cfg80211.h"
    },
    {
      "type": "modify",
      "old_id": "082f0ee12f1b7b949b618baa3f95ff218baba0ce",
      "old_mode": 33188,
      "old_path": "net/wireless/core.c",
      "new_id": "610238d723fff798039e54ad4472c3077cd3596b",
      "new_mode": 33188,
      "new_path": "net/wireless/core.c"
    },
    {
      "type": "modify",
      "old_id": "f60c66b88677255b52b8d76383241f4a888a9e71",
      "old_mode": 33188,
      "old_path": "net/wireless/core.h",
      "new_id": "ac6ce9f967ec70221f15323e24c2640e71213dae",
      "new_mode": 33188,
      "new_path": "net/wireless/core.h"
    },
    {
      "type": "modify",
      "old_id": "625c99cf70a3e281e007f3f97aebf90ef8f80ff9",
      "old_mode": 33188,
      "old_path": "net/wireless/nl80211.c",
      "new_id": "5adcb6bd0fc56db46d111cdac0ca7ccc57fa2d27",
      "new_mode": 33188,
      "new_path": "net/wireless/nl80211.c"
    },
    {
      "type": "modify",
      "old_id": "b451df3096dd1eebbc8c91a4f170450e0ef1d6ed",
      "old_mode": 33188,
      "old_path": "net/wireless/sme.c",
      "new_id": "2a719b5c487e39fa85da5526e2491ec2039f277b",
      "new_mode": 33188,
      "new_path": "net/wireless/sme.c"
    }
  ]
}
