Procházet zdrojové kódy

Check bounds of buffer_size before adding to pkt_size

madlohe před 6 roky
rodič
revize
b84f9b8c9d
2 změnil soubory, kde provedl 6 přidání a 0 odebrání
  1. 2 0
      include/nrpe.h
  2. 4 0
      src/nrpe.c

+ 2 - 0
include/nrpe.h

@@ -24,6 +24,8 @@
  *
  ****************************************************************************/
 
+#include <limits.h>
+
 typedef struct command_struct {
 	char					*command_name;
 	char					*command_line;

+ 4 - 0
src/nrpe.c

@@ -2037,6 +2037,10 @@ int read_packet(int sock, void *ssl_ptr, v2_packet * v2_pkt, v3_packet ** v3_pkt
 			tot_bytes += rc;
 
 			buffer_size = ntohl(buffer_size);
+			if (buffer_size < 0 || buffer_size > INT_MAX - pkt_size) {
+				logit(LOG_ERR, "Error: Received packet with invalid buffer size");
+				return -1;
+			}
 			pkt_size += buffer_size;
 			if ((*v3_pkt = calloc(1, pkt_size)) == NULL) {
 				logit(LOG_ERR, "Error: (use_ssl == false): Could not allocate memory for packet");