)]}'
{
  "commit": "63b88b9041ceef8217f34de71a2e96f0c3f0fd3b",
  "tree": "368562057a08a641873e256d2a271d1fc8561940",
  "parents": [
    "099473c16bac7b936994bc95b5fd96f36397e1ad"
  ],
  "author": {
    "name": "Anton Vorontsov",
    "email": "avorontsov@mvista.com",
    "time": "Fri Jun 11 10:51:03 2010 +0000"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Wed Jun 16 18:09:17 2010 -0700"
  },
  "message": "gianfar: Fix oversized packets handling\n\nIssuing the following command on host:\n\n$ ifconfig eth2 mtu 1600 ; ping 10.0.0.27 -s 1485 -c 1\n\nMakes some boards (tested with MPC8315 rev 1.1 and MPC8313 rev 1.0)\noops like this:\n\n  skb_over_panic: text:c0195914 len:1537 put:1537 head:c79e4800 data:c79e4880 tail:0xc79e4e81 end:0xc79e4e80 dev:eth1\n  ------------[ cut here ]------------\n  kernel BUG at net/core/skbuff.c:127!\n  Oops: Exception in kernel mode, sig: 5 [#1]\n  MPC831x RDB\n  last sysfs file: /sys/kernel/uevent_seqnum\n  Modules linked in:\n  NIP: c01c1840 LR: c01c1840 CTR: c016d918\n  [...]\n  NIP [c01c1840] skb_over_panic+0x48/0x5c\n  LR [c01c1840] skb_over_panic+0x48/0x5c\n  Call Trace:\n  [c0339d50] [c01c1840] skb_over_panic+0x48/0x5c (unreliable)\n  [c0339d60] [c01c3020] skb_put+0x5c/0x60\n  [c0339d70] [c0195914] gfar_clean_rx_ring+0x25c/0x3d0\n  [c0339dc0] [c01976e8] gfar_poll+0x170/0x1bc\n\nDumped buffer descriptors showed that eTSEC\u0027s length/truncation\nlogic sometimes passes oversized packets, i.e. for the above ICMP\npacket the following two buffer descriptors may become ready:\n\n  status\u003d1400 length\u003d1536\n  status\u003d1800 length\u003d1541\n\nSo, it seems that gianfar actually receives the whole big frame,\nand it tries to place the packet into two BDs. This situation\nconfuses the driver, and so the skb_put() sanity check fails.\n\nThis patch fixes the issue by adding an appropriate check, i.e.\nthe driver should not try to process frames with buffer\ndescriptor\u0027s length over rx_buffer_size (i.e. maxfrm and mrblr).\n\nNote that sometimes eTSEC works correctly, i.e. in the second\n(last) buffer descriptor bits \u0027truncated\u0027 and \u0027crcerr\u0027 are set,\nand so there\u0027s no oops. Though I couldn\u0027t find any logic when\nit works correctly and when not.\n\nSigned-off-by: Anton Vorontsov \u003cavorontsov@mvista.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "227b628bc214060249d7f8c9af3890199644f59a",
      "old_mode": 33188,
      "old_path": "drivers/net/gianfar.c",
      "new_id": "28b53d1cd4f168701fa4ce41a7c5e0edbaa6f783",
      "new_mode": 33188,
      "new_path": "drivers/net/gianfar.c"
    }
  ]
}
