libfc: Fix frags in frame exceeding SKB_MAX_FRAGS in fc_fcp_send_data
authorYi Zou <yi.zou@intel.com>
Wed, 21 Oct 2009 23:27:58 +0000 (16:27 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 28 Jan 2010 23:01:36 +0000 (15:01 -0800)
commit4c40dbe52412690b4a686e4e6c1625f19cb8c6c6
tree81871f3e15eeb2adec00bfaf657848da12daebaf
parent88cc93a1148a8a2f56a556a4f511837056556c4e
libfc: Fix frags in frame exceeding SKB_MAX_FRAGS in fc_fcp_send_data

commit d37322a43ebac79eef417149f5696390cf8872db upstream.

In case of sequence offload, in fc_fcp_send_data(), the skb_fill_page_info()
called may end up adding more frags to the skb_shinfo(fp_skb(fp))->frags[],
exceeding SKB_MAX_FRAGS, this eventually corrupts the memory. I am adding the
FR_FRAME_SG_LEN back, but as SKB_MAX_FRAGS -1, leaving 1 for our fcoe_eof_crc
page. And send will be broken into multiple large sends if the frame already
contains more frags than skb handle.

Signed-off-by: Yi Zou <yi.zou@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/scsi/libfc/fc_fcp.c
include/scsi/fc_frame.h