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

Commit b87b65b7 authored by Hardik Arya's avatar Hardik Arya Committed by Gerrit - the friendly Code Review server
Browse files

diag: Handle data_ready count properly



Currently there is a possibility of corrupting
data_ready count while decreasing it. The Patch
fix this with properly decreasing data_ready count.

Change-Id: I86f713afa5f3af24c48ede434251dc529077cd68
Signed-off-by: default avatarHardik Arya <harya@codeaurora.org>
parent 5f62bf9b
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -712,7 +712,12 @@ static void diag_socket_drop_data(struct diag_socket_info *info)
		if (err || pkt_len < 0)
			break;
		spin_lock_irqsave(&info->lock, flags);
		if (info->data_ready > 0) {
			info->data_ready--;
		} else {
			spin_unlock_irqrestore(&info->lock, flags);
			break;
		}
		spin_unlock_irqrestore(&info->lock, flags);
		read_len = kernel_recvmsg(info->hdl, &read_msg, &iov, 1,
					  pkt_len, MSG_DONTWAIT);
@@ -808,7 +813,13 @@ static int diag_socket_read(void *ctxt, unsigned char *buf, int buf_len)
		}

		spin_lock_irqsave(&info->lock, flags);
		if (info->data_ready > 0) {
			info->data_ready--;
		} else {
			spin_unlock_irqrestore(&info->lock, flags);
			mutex_unlock(&info->socket_info_mutex);
			break;
		}
		spin_unlock_irqrestore(&info->lock, flags);

		read_len = kernel_recvmsg(info->hdl, &read_msg, &iov, 1,