)]}'
{
  "commit": "5b6e9bcdeb65634b4ad604eb4536404bbfc62cfa",
  "tree": "9c758413d018351b2e95942314a1fa973d7fd882",
  "parents": [
    "8aa51d64c1f526e43b1e7f89fb8b98c2fd583f4b"
  ],
  "author": {
    "name": "Ming Lei",
    "email": "tom.leiming@gmail.com",
    "time": "Thu Apr 26 11:33:46 2012 +0800"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Tue May 15 13:41:42 2012 -0400"
  },
  "message": "usbnet: fix skb traversing races during unlink(v2)\n\nCommit 4231d47e6fe69f061f96c98c30eaf9fb4c14b96d(net/usbnet: avoid\nrecursive locking in usbnet_stop()) fixes the recursive locking\nproblem by releasing the skb queue lock before unlink, but may\ncause skb traversing races:\n\t- after URB is unlinked and the queue lock is released,\n\tthe refered skb and skb-\u003enext may be moved to done queue,\n\teven be released\n\t- in skb_queue_walk_safe, the next skb is still obtained\n\tby next pointer of the last skb\n\t- so maybe trigger oops or other problems\n\nThis patch extends the usage of entry-\u003estate to describe \u0027start_unlink\u0027\nstate, so always holding the queue(rx/tx) lock to change the state if\nthe referd skb is in rx or tx queue because we need to know if the\nrefered urb has been started unlinking in unlink_urbs.\n\nThe other part of this patch is based on Huajun\u0027s patch:\nalways traverse from head of the tx/rx queue to get skb which is\nto be unlinked but not been started unlinking.\n\nSigned-off-by: Huajun Li \u003chuajun.li.lee@gmail.com\u003e\nSigned-off-by: Ming Lei \u003ctom.leiming@gmail.com\u003e\nCc: Oliver Neukum \u003coneukum@suse.de\u003e\nCc: stable@kernel.org\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2d927fb4adf4ea6805b2aeb02d06c8cb5108f496",
      "old_mode": 33188,
      "old_path": "drivers/net/usb/usbnet.c",
      "new_id": "b38db48b1ce09b380d8cdea0ea444be0d97573d0",
      "new_mode": 33188,
      "new_path": "drivers/net/usb/usbnet.c"
    },
    {
      "type": "modify",
      "old_id": "605b0aa8d852f63d4d0c7a3cf18add1f518e2acd",
      "old_mode": 33188,
      "old_path": "include/linux/usb/usbnet.h",
      "new_id": "76f439647c4bdbe8a81c8518be0f5194ed43af8f",
      "new_mode": 33188,
      "new_path": "include/linux/usb/usbnet.h"
    }
  ]
}
