mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
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: 6d6148bc78
("net: hsr: fix incorrect lsdu size in the tag of HSR frames for small frames")
Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
34b85adad8
commit
5d93518e06
@ -120,15 +120,17 @@ 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,
|
||||
struct hsr_port *port, u8 proto_version)
|
||||
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;
|
||||
int lane_id;
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user