Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6baac1d authored by Ashwanth Goli's avatar Ashwanth Goli Committed by Subash Abhinov Kasiviswanathan
Browse files

rmnet_data: queue QMAP control packets if start_xmit fails



rmnet_data does not free skb's when phy netdev
fails to xmit a qmap control packet cauing memory leak.
To avoid this we queue the packet back into device queue
if start_xmit fails.

CRs-Fixed: 1089477
Change-Id: Id7efdd10ac76c989c086cb5f934a4b666b7c5939
Signed-off-by: default avatarAshwanth Goli <ashwanth@codeaurora.org>
parent 53c1534d
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
/* Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -118,6 +118,7 @@ static void rmnet_map_send_ack(struct sk_buff *skb,
{
	struct rmnet_map_control_command_s *cmd;
	int xmit_status;
	int rc;

	if (unlikely(!skb))
		return;
@@ -146,6 +147,15 @@ static void rmnet_map_send_ack(struct sk_buff *skb,
	netif_tx_unlock(skb->dev);

	LOGD("MAP command ACK=%hhu sent with rc: %d", type & 0x03, xmit_status);

	if (xmit_status != NETDEV_TX_OK) {
		rc = dev_queue_xmit(skb);
		if (rc != 0) {
			LOGD("Failed to queue packet for transmission on [%s]",
			     skb->dev->name);
		}
	}

}

/* rmnet_map_command() - Entry point for handling MAP commands