)]}'
{
  "commit": "763fe700b7c58ad64fe5202c5638848244dd4127",
  "tree": "223a657f0b72c286e74dc20dac574a85f69f811d",
  "parents": [
    "e1d7c5ac1c246ce5775f604515de0a59fbf2116e"
  ],
  "author": {
    "name": "Zihan Xi",
    "email": "xizh2024@lzu.edu.cn",
    "time": "Tue Jul 21 23:25:42 2026 +0800"
  },
  "committer": {
    "name": "Steffen Klassert",
    "email": "steffen.klassert@secunet.com",
    "time": "Thu Jul 23 10:07:20 2026 +0200"
  },
  "message": "xfrm: avoid lock inversion in nat keepalive work\n\nnat_keepalive_work() walks the state table while xfrm_state_walk()\nholds net-\u003exfrm.xfrm_state_lock. Its callback then acquires x-\u003elock,\nwhich conflicts with the delete path taking the same locks in reverse\norder via xfrm_state_delete() and __xfrm_state_delete(). This creates\nan AB-BA deadlock that is reported by lockdep when a NAT keepalive\nworker races with SA deletion.\n\nFix this by splitting the keepalive walk into two phases. First,\ncollect the candidate states while the walk holds xfrm_state_lock and\ntake a reference on each state. Then, after the walk completes, process\neach collected state and acquire x-\u003elock without nesting it under\nxfrm_state_lock.\n\nFixes: f531d13bdfe3 (\"xfrm: support sending NAT keepalives in ESP in UDP states\")\nCc: stable@vger.kernel.org\nReported-by: Vega \u003cvega@nebusec.ai\u003e\nAssisted-by: Codex:gpt-5.4\nSigned-off-by: Zihan Xi \u003cxizh2024@lzu.edu.cn\u003e\nSigned-off-by: Ren Wei \u003cenjou1224z@gmail.com\u003e\nSigned-off-by: Steffen Klassert \u003csteffen.klassert@secunet.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "eb1b6f67739e1dc3e0ffdf67a7c94545335c149c",
      "old_mode": 33188,
      "old_path": "net/xfrm/xfrm_nat_keepalive.c",
      "new_id": "8679c68c10a1672a56831a1311cd81ab7bce1271",
      "new_mode": 33188,
      "new_path": "net/xfrm/xfrm_nat_keepalive.c"
    }
  ]
}
