Ver código fonte

Stack: Add check for successful network layer allocation

Credit to oss-fuzz

Fixes issue:
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11435
Stefan Profanter 5 anos atrás
pai
commit
56bb742e2b
2 arquivos alterados com 10 adições e 6 exclusões
  1. 8 6
      arch/ua_network_tcp.c
  2. 2 0
      plugins/ua_config_default.c

+ 8 - 6
arch/ua_network_tcp.c

@@ -525,20 +525,22 @@ UA_ServerNetworkLayer
 UA_ServerNetworkLayerTCP(UA_ConnectionConfig config, UA_UInt16 port, UA_Logger logger) {
     UA_ServerNetworkLayer nl;
     memset(&nl, 0, sizeof(UA_ServerNetworkLayer));
+    nl.deleteMembers = ServerNetworkLayerTCP_deleteMembers;
+    nl.localConnectionConfig = config;
+    nl.start = ServerNetworkLayerTCP_start;
+    nl.listen = ServerNetworkLayerTCP_listen;
+    nl.stop = ServerNetworkLayerTCP_stop;
+    nl.handle = NULL;
+
     ServerNetworkLayerTCP *layer = (ServerNetworkLayerTCP*)
         UA_calloc(1,sizeof(ServerNetworkLayerTCP));
     if(!layer)
         return nl;
+    nl.handle = layer;
 
     layer->logger = (logger != NULL ? logger : UA_Log_Stdout);
     layer->port = port;
 
-    nl.handle = layer;
-    nl.localConnectionConfig = config;
-    nl.start = ServerNetworkLayerTCP_start;
-    nl.listen = ServerNetworkLayerTCP_listen;
-    nl.stop = ServerNetworkLayerTCP_stop;
-    nl.deleteMembers = ServerNetworkLayerTCP_deleteMembers;
     return nl;
 }
 

+ 2 - 0
plugins/ua_config_default.c

@@ -321,6 +321,8 @@ addDefaultNetworkLayers(UA_ServerConfig *conf, UA_UInt16 portNumber, UA_UInt32 s
 
     conf->networkLayers[0] =
         UA_ServerNetworkLayerTCP(config, portNumber, conf->logger);
+    if (!conf->networkLayers[0].handle)
+        return UA_STATUSCODE_BADOUTOFMEMORY;
     conf->networkLayersSize = 1;
 
     return UA_STATUSCODE_GOOD;