From 69bc179b203c17380ba0b4fda7cf99af65cc5324 Mon Sep 17 00:00:00 2001 From: Frank Maker Date: Mon, 1 Aug 2011 19:51:49 -0700 Subject: [PATCH] libnl: BUGFIX to support wpa_supplicant p2p_find Close socket file descriptor when nl_msg freed Correct nested attribute container size when closing nest --- libnl_2/attr.c | 9 +++++++++ libnl_2/socket.c | 1 + 2 files changed, 10 insertions(+) diff --git a/libnl_2/attr.c b/libnl_2/attr.c index 94676681b..d416350e2 100644 --- a/libnl_2/attr.c +++ b/libnl_2/attr.c @@ -87,8 +87,17 @@ struct nlattr *nla_nest_start(struct nl_msg *msg, int attrtype) /* Finalize nesting of attributes. */ int nla_nest_end(struct nl_msg *msg, struct nlattr *start) { + struct nlattr *container; + + /* Adjust nested attribute container size */ + container = (unsigned char *) start - sizeof(struct nlattr); + container->nla_len = (unsigned char *) \ + nlmsg_tail(nlmsg_hdr(msg)) - (unsigned char *)container; + + /* Fix attribute size */ start->nla_len = (unsigned char *) \ nlmsg_tail(nlmsg_hdr(msg)) - (unsigned char *)start; + return 0; } diff --git a/libnl_2/socket.c b/libnl_2/socket.c index 3bcf210f8..ce54f19ba 100644 --- a/libnl_2/socket.c +++ b/libnl_2/socket.c @@ -91,6 +91,7 @@ struct nl_sock *nl_socket_alloc_cb(struct nl_cb *cb) void nl_socket_free(struct nl_sock *sk) { nl_cb_put(sk->s_cb); + close(sk->s_fd); free(sk); }