)]}'
{
  "commit": "da8c87241c26aac81a64c7e4d21d438a33018f4e",
  "tree": "ff2224eaeac133a20ce0ab7f128d386a8216c4b3",
  "parents": [
    "8e904550d0fffcda2b18d7ab12750b0c75757e89"
  ],
  "author": {
    "name": "Cong Wang",
    "email": "amwang@redhat.com",
    "time": "Thu Feb 21 23:32:27 2013 +0000"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Sat Feb 23 21:00:06 2013 -0500"
  },
  "message": "vlan: adjust vlan_set_encap_proto() for its callers\n\nThere are two places to call vlan_set_encap_proto():\nvlan_untag() and __pop_vlan_tci().\n\nvlan_untag() assumes skb-\u003edata points after mac addr, otherwise\nthe following code\n\n        vhdr \u003d (struct vlan_hdr *) skb-\u003edata;\n        vlan_tci \u003d ntohs(vhdr-\u003eh_vlan_TCI);\n        __vlan_hwaccel_put_tag(skb, vlan_tci);\n\n        skb_pull_rcsum(skb, VLAN_HLEN);\n\nwon\u0027t be correct. But __pop_vlan_tci() assumes points _before_\nmac addr.\n\nIn vlan_set_encap_proto(), it looks for some magic L2 value\nafter mac addr:\n\n        rawp \u003d skb-\u003edata;\n        if (*(unsigned short *) rawp \u003d\u003d 0xFFFF)\n\t...\n\nTherefore __pop_vlan_tci() is obviously wrong.\n\nA quick fix is avoiding using skb-\u003edata in vlan_set_encap_proto(),\nuse \u0027vhdr+1\u0027 is always correct in both cases.\n\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Jesse Gross \u003cjesse@nicira.com\u003e\nSigned-off-by: Cong Wang \u003camwang@redhat.com\u003e\nAcked-by: Jesse Gross \u003cjesse@nicira.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d06cc5c8f58cf3a58ed34101f362a0b9be0fc0a6",
      "old_mode": 33188,
      "old_path": "include/linux/if_vlan.h",
      "new_id": "218a3b686d90600f313d1e423a752b9cc36a9dad",
      "new_mode": 33188,
      "new_path": "include/linux/if_vlan.h"
    }
  ]
}
