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

Commit 03829345 authored by Dmitry Shmidt's avatar Dmitry Shmidt Committed by Android Git Automerger
Browse files

am e7184667: am 4f7c0843: Merge "libnl_2: Fix memory leaks" into ics-mr0

* commit 'e7184667':
  libnl_2: Fix memory leaks
parents 1d6a0a2e e7184667
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -39,16 +39,14 @@ fail:
struct nl_cb *nl_cb_clone(struct nl_cb *orig)
{
	struct nl_cb *new_cb;
	int new_refcnt;

	new_cb = nl_cb_alloc(NL_CB_DEFAULT);
	if (new_cb == NULL)
		goto fail;

	/* Preserve reference count and copy original */
	new_refcnt = new_cb->cb_refcnt;
	/* Copy original and set refcount to 1 */
	memcpy(new_cb, orig, sizeof(*orig));
	new_cb->cb_refcnt = new_refcnt;
	new_cb->cb_refcnt = 1;

	return new_cb;
fail:
@@ -84,9 +82,9 @@ struct nl_cb *nl_cb_get(struct nl_cb *cb)

void nl_cb_put(struct nl_cb *cb)
{
	if (!cb)
		return;
	cb->cb_refcnt--;
	if (cb->cb_refcnt <= 0)
		free(cb);

}
+8 −8
Original line number Diff line number Diff line
@@ -59,15 +59,14 @@ int nl_recv(struct nl_sock *sk, struct sockaddr_nl *nla, \
{
	int rc = -1;
	int sk_flags;
	int RECV_BUF_SIZE;
	int RECV_BUF_SIZE = getpagesize();
	int errsv;
	struct iovec recvmsg_iov;
	struct msghdr msg;

	/* Allocate buffer */
	RECV_BUF_SIZE = getpagesize();
	*buf = (unsigned char *) malloc(RECV_BUF_SIZE);
	if (!buf) {
	if (!(*buf)) {
		rc = -ENOMEM;
		goto fail;
	}
@@ -91,8 +90,11 @@ int nl_recv(struct nl_sock *sk, struct sockaddr_nl *nla, \
	errsv = errno;
	fcntl(sk->s_fd, F_SETFL, sk_flags);

	if (rc < 0)
	if (rc < 0) {
		rc = -errsv;
		free(*buf);
		*buf = NULL;
	}

fail:
	return rc;
@@ -108,7 +110,6 @@ int nl_recvmsgs(struct nl_sock *sk, struct nl_cb *cb)
	int rc, cb_rc = NL_OK, done = 0;

	do {

		unsigned char *buf;
		int i, rem, flags;
		struct nlmsghdr *nlh;
@@ -187,7 +188,6 @@ int nl_recvmsgs(struct nl_sock *sk, struct nl_cb *cb)
			if (done)
				break;
		}

		free(buf);
		buf = NULL;

+22 −13
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ int nl_socket_add_membership(struct nl_sock *sk, int group)
}

/* Allocate new netlink socket. */
struct nl_sock *nl_socket_alloc(void)
static struct nl_sock *_nl_socket_alloc(void)
{
	struct nl_sock *sk;
	struct timeval tv;
@@ -39,13 +39,13 @@ struct nl_sock *nl_socket_alloc(void)

	sk = (struct nl_sock *) malloc(sizeof(struct nl_sock));
	if (!sk)
		goto fail;
		return NULL;
	memset(sk, 0, sizeof(*sk));

	/* Get current time */

	if (gettimeofday(&tv, NULL))
		return NULL;
		goto fail;
	else
		sk->s_seq_next = (int) tv.tv_sec;

@@ -59,24 +59,36 @@ struct nl_sock *nl_socket_alloc(void)
	sk->s_peer.nl_pid = 0; /* Kernel */
	sk->s_peer.nl_groups = 0; /* No groups */

	cb = (struct nl_cb *) malloc(sizeof(struct nl_cb));
	if (!cb)
		goto cb_fail;
	memset(cb, 0, sizeof(*cb));
	sk->s_cb = nl_cb_alloc(NL_CB_DEFAULT);
	return sk;
fail:
	free(sk);
	return NULL;
}

/* Allocate new netlink socket. */
struct nl_sock *nl_socket_alloc(void)
{
	struct nl_sock *sk = _nl_socket_alloc();
	struct nl_cb *cb;

	if (!sk)
		return NULL;

	cb = nl_cb_alloc(NL_CB_DEFAULT);
	if (!cb)
		goto cb_fail;
	sk->s_cb = cb;
	return sk;
cb_fail:
	free(sk);
fail:
	return NULL;
}

/* Allocate new socket with custom callbacks. */
struct nl_sock *nl_socket_alloc_cb(struct nl_cb *cb)
{
	struct nl_sock *sk = nl_socket_alloc();
	struct nl_sock *sk = _nl_socket_alloc();

	if (!sk)
		return NULL;

@@ -84,7 +96,6 @@ struct nl_sock *nl_socket_alloc_cb(struct nl_cb *cb)
	nl_cb_get(cb);

	return sk;

}

/* Free a netlink socket. */
@@ -116,5 +127,3 @@ int nl_socket_get_fd(struct nl_sock *sk)
{
	return sk->s_fd;
}