Unverified Commit 4842b09d authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!9439 CVE-2022-48715

Merge Pull Request from: @ci-robot 
 
PR sync from: Chen Ridong <chenridong@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/V2EROWXJYTL67EVO7GGWR7SYOHM2643G/ 
*** BLURB HERE ***

John Meneghini (1):
  scsi: bnx2fc: Make bnx2fc_recv_frame() mp safe


-- 
2.34.1
 
https://gitee.com/src-openeuler/kernel/issues/IA72MR 
 
Link:https://gitee.com/openeuler/kernel/pulls/9439

 

Reviewed-by: default avatarLiu YongQiang <liuyongqiang13@huawei.com>
Signed-off-by: default avatarZhang Changzhong <zhangchangzhong@huawei.com>
parents dfce73f2 efa8eec8
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -515,7 +515,8 @@ static int bnx2fc_l2_rcv_thread(void *arg)

static void bnx2fc_recv_frame(struct sk_buff *skb)
{
	u32 fr_len;
	u64 crc_err;
	u32 fr_len, fr_crc;
	struct fc_lport *lport;
	struct fcoe_rcv_info *fr;
	struct fc_stats *stats;
@@ -549,6 +550,11 @@ static void bnx2fc_recv_frame(struct sk_buff *skb)
	skb_pull(skb, sizeof(struct fcoe_hdr));
	fr_len = skb->len - sizeof(struct fcoe_crc_eof);

	stats = per_cpu_ptr(lport->stats, get_cpu());
	stats->RxFrames++;
	stats->RxWords += fr_len / FCOE_WORD_TO_BYTE;
	put_cpu();

	fp = (struct fc_frame *)skb;
	fc_frame_init(fp);
	fr_dev(fp) = lport;
@@ -631,16 +637,15 @@ static void bnx2fc_recv_frame(struct sk_buff *skb)
		return;
	}

	stats = per_cpu_ptr(lport->stats, smp_processor_id());
	stats->RxFrames++;
	stats->RxWords += fr_len / FCOE_WORD_TO_BYTE;
	fr_crc = le32_to_cpu(fr_crc(fp));

	if (le32_to_cpu(fr_crc(fp)) !=
			~crc32(~0, skb->data, fr_len)) {
		if (stats->InvalidCRCCount < 5)
	if (unlikely(fr_crc != ~crc32(~0, skb->data, fr_len))) {
		stats = per_cpu_ptr(lport->stats, get_cpu());
		crc_err = (stats->InvalidCRCCount++);
		put_cpu();
		if (crc_err < 5)
			printk(KERN_WARNING PFX "dropping frame with "
			       "CRC error\n");
		stats->InvalidCRCCount++;
		kfree_skb(skb);
		return;
	}