net: qualcomm: rmnet: Fix leak on transmit failure
[ Upstream commitc20a548792
] If a skb in transmit path does not have sufficient headroom to add the map header, the skb is not sent out and is never freed. Fixes:ceed73a2cf
("drivers: net: ethernet: qualcomm: rmnet: Initial implementation") Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
8172a467ad
Коммит
0aeed5daaf
|
@ -166,12 +166,12 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,
|
|||
|
||||
if (skb_headroom(skb) < required_headroom) {
|
||||
if (pskb_expand_head(skb, required_headroom, 0, GFP_KERNEL))
|
||||
return RMNET_MAP_CONSUMED;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
map_header = rmnet_map_add_map_header(skb, additional_header_len, 0);
|
||||
if (!map_header)
|
||||
return RMNET_MAP_CONSUMED;
|
||||
goto fail;
|
||||
|
||||
if (port->egress_data_format & RMNET_EGRESS_FORMAT_MUXING) {
|
||||
if (ep->mux_id == 0xff)
|
||||
|
@ -183,6 +183,10 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,
|
|||
skb->protocol = htons(ETH_P_MAP);
|
||||
|
||||
return RMNET_MAP_SUCCESS;
|
||||
|
||||
fail:
|
||||
kfree_skb(skb);
|
||||
return RMNET_MAP_CONSUMED;
|
||||
}
|
||||
|
||||
/* Ingress / Egress Entry Points */
|
||||
|
|
Загрузка…
Ссылка в новой задаче