audit and make all malloc check for OOM
Signed-off-by: Andy Green <andy.green@linaro.org>
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index 7848761..b36a9b2 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -1336,6 +1336,11 @@
wsi->active_extensions_user[
wsi->count_active_extensions] =
malloc(ext->per_session_data_size);
+ if (wsi->active_extensions_user[
+ wsi->count_active_extensions] == NULL) {
+ lwsl_err("Out of mem\n");
+ goto bail2;
+ }
memset(wsi->active_extensions_user[
wsi->count_active_extensions], 0,
ext->per_session_data_size);
@@ -1692,17 +1697,16 @@
if (context->fds_count >= MAX_CLIENTS) {
lwsl_err("too busy to accept new broadcast "
"proxy client\n");
-#ifdef WIN32
- closesocket(accept_fd);
-#else
- close(accept_fd);
-#endif
- break;
+ goto bail_prox_listener;
}
/* create a dummy wsi for the connection and add it */
new_wsi = (struct libwebsocket *)malloc(sizeof(struct libwebsocket));
+ if (new_wsi == NULL) {
+ lwsl_err("Out of mem\n");
+ goto bail_prox_listener;
+ }
memset(new_wsi, 0, sizeof (struct libwebsocket));
new_wsi->sock = accept_fd;
new_wsi->mode = LWS_CONNMODE_BROADCAST_PROXY;
@@ -1726,6 +1730,14 @@
break;
+bail_prox_listener:
+#ifdef WIN32
+ closesocket(accept_fd);
+#else
+ close(accept_fd);
+#endif
+ break;
+
case LWS_CONNMODE_BROADCAST_PROXY:
/* handle session socket closed */
@@ -2915,10 +2927,16 @@
if (n < 0) {
lwsl_err("ERROR on binding to port %d (%d %d)\n",
port, n, errno);
+ close(sockfd);
return NULL;
}
wsi = (struct libwebsocket *)malloc(sizeof(struct libwebsocket));
+ if (wsi == NULL) {
+ lwsl_err("Out of mem\n");
+ close(sockfd);
+ return NULL;
+ }
memset(wsi, 0, sizeof (struct libwebsocket));
wsi->sock = sockfd;
wsi->count_active_extensions = 0;
@@ -3007,6 +3025,11 @@
/* dummy wsi per broadcast proxy socket */
wsi = (struct libwebsocket *)malloc(sizeof(struct libwebsocket));
+ if (wsi == NULL) {
+ lwsl_err("Out of mem\n");
+ close(fd);
+ return NULL;
+ }
memset(wsi, 0, sizeof (struct libwebsocket));
wsi->sock = fd;
wsi->mode = LWS_CONNMODE_BROADCAST_PROXY_LISTENER;