Commit 5d93518e authored by Murali Karicheri's avatar Murali Karicheri Committed by David S. Miller
Browse files

net: hsr: check for return value of skb_put_padto()



skb_put_padto() can fail. So check for return type and return NULL
for skb. Caller checks for skb and acts correctly if it is NULL.

Fixes: 6d6148bc ("net: hsr: fix incorrect lsdu size in the tag of HSR frames for small frames")

Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 34b85ada
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -120,7 +120,8 @@ static struct sk_buff *frame_get_stripped_skb(struct hsr_frame_info *frame,
	return skb_clone(frame->skb_std, GFP_ATOMIC);
}

static void hsr_fill_tag(struct sk_buff *skb, struct hsr_frame_info *frame,
static struct sk_buff *hsr_fill_tag(struct sk_buff *skb,
				    struct hsr_frame_info *frame,
				    struct hsr_port *port, u8 proto_version)
{
	struct hsr_ethhdr *hsr_ethhdr;
@@ -128,7 +129,8 @@ static void hsr_fill_tag(struct sk_buff *skb, struct hsr_frame_info *frame,
	int lsdu_size;

	/* pad to minimum packet size which is 60 + 6 (HSR tag) */
	skb_put_padto(skb, ETH_ZLEN + HSR_HLEN);
	if (skb_put_padto(skb, ETH_ZLEN + HSR_HLEN))
		return NULL;

	if (port->type == HSR_PT_SLAVE_A)
		lane_id = 0;
@@ -147,6 +149,8 @@ static void hsr_fill_tag(struct sk_buff *skb, struct hsr_frame_info *frame,
	hsr_ethhdr->hsr_tag.encap_proto = hsr_ethhdr->ethhdr.h_proto;
	hsr_ethhdr->ethhdr.h_proto = htons(proto_version ?
			ETH_P_HSR : ETH_P_PRP);

	return skb;
}

static struct sk_buff *create_tagged_skb(struct sk_buff *skb_o,
@@ -175,9 +179,10 @@ static struct sk_buff *create_tagged_skb(struct sk_buff *skb_o,
	memmove(dst, src, movelen);
	skb_reset_mac_header(skb);

	hsr_fill_tag(skb, frame, port, port->hsr->prot_version);

	return skb;
	/* skb_put_padto free skb on error and hsr_fill_tag returns NULL in
	 * that case
	 */
	return hsr_fill_tag(skb, frame, port, port->hsr->prot_version);
}

/* If the original frame was an HSR tagged frame, just clone it to be sent