Blame SOURCES/arptables-0.0.4-covscan_fix02_buf_overflow.patch

2070a3
commit fea55b0930d7cb67a3359185e53ef6b856b7721d
2070a3
Author: Jaromír Končický <jkoncick@redhat.com>
2070a3
Date:   Tue Oct 15 21:55:52 2013 +0200
2070a3
2070a3
    fix potential buffer overflows reported by static analysis
2070a3
2070a3
diff --git a/userspace/arptables/arptables.c b/userspace/arptables/arptables.c
2070a3
index 8ef445a..4da6fea 100644
2070a3
--- a/userspace/arptables/arptables.c
2070a3
+++ b/userspace/arptables/arptables.c
2070a3
@@ -1270,7 +1270,7 @@ print_firewall(const struct arpt_entry *fw,
2070a3
 			sprintf(buf, "%s", addr_to_dotted(&(fw->arp.src)));
2070a3
 		else
2070a3
 			sprintf(buf, "%s", addr_to_anyname(&(fw->arp.src)));
2070a3
-		strcat(buf, mask_to_dotted(&(fw->arp.smsk)));
2070a3
+		strncat(buf, mask_to_dotted(&(fw->arp.smsk)), sizeof(buf) - strlen(buf) -1);
2070a3
 		printf("-s %s ", buf);
2070a3
 	}
2070a3
 
2070a3
@@ -1294,7 +1294,7 @@ after_devsrc:
2070a3
 			sprintf(buf, "%s", addr_to_dotted(&(fw->arp.tgt)));
2070a3
 		else
2070a3
 			sprintf(buf, "%s", addr_to_anyname(&(fw->arp.tgt)));
2070a3
-		strcat(buf, mask_to_dotted(&(fw->arp.tmsk)));
2070a3
+		strncat(buf, mask_to_dotted(&(fw->arp.tmsk)),  sizeof(buf) - strlen(buf) -1);
2070a3
 		printf("-d %s ", buf);
2070a3
 	}
2070a3
 
2070a3
@@ -1796,7 +1796,7 @@ int do_command(int argc, char *argv[], char **table, arptc_handle_t *handle)
2070a3
 				*table, arptc_strerror(errno));
2070a3
 			}
2070a3
 		}
2070a3
-        }
2070a3
+	}
2070a3
 
2070a3
 	memset(&fw, 0, sizeof(fw));
2070a3
 	opts = original_opts;
2070a3
@@ -2064,7 +2064,8 @@ int do_command(int argc, char *argv[], char **table, arptc_handle_t *handle)
2070a3
 
2070a3
 				target->t = fw_calloc(1, size);
2070a3
 				target->t->u.target_size = size;
2070a3
-				strcpy(target->t->u.user.name, jumpto);
2070a3
+				strncpy(target->t->u.user.name, jumpto, sizeof(target->t->u.user.name));
2070a3
+				target->t->u.user.name[sizeof(target->t->u.user.name)-1] = '\0';
2070a3
 /*
2070a3
 				target->init(target->t, &fw.nfcache);
2070a3
 */
2070a3
diff --git a/userspace/arptables/libarptc/libarptc_incl.c b/userspace/arptables/libarptc/libarptc_incl.c
2070a3
index 2fa3d43..9c1aeac 100644
2070a3
--- a/userspace/arptables/libarptc/libarptc_incl.c
2070a3
+++ b/userspace/arptables/libarptc/libarptc_incl.c
2070a3
@@ -209,8 +209,10 @@ alloc_handle(const char *tablename, unsigned int size, unsigned int num_rules)
2070a3
 	h->counter_map = (void *)h
2070a3
 		+ sizeof(STRUCT_TC_HANDLE)
2070a3
 		+ size;
2070a3
-	strcpy(h->info.name, tablename);
2070a3
-	strcpy(h->entries.name, tablename);
2070a3
+	strncpy(h->info.name, tablename, sizeof(h->info.name));
2070a3
+	h->info.name[sizeof(h->info.name)-1] = '\0';
2070a3
+	strncpy(h->entries.name, tablename, sizeof(h->entries.name));
2070a3
+	h->entries.name[sizeof(h->entries.name)-1] = '\0';
2070a3
 
2070a3
 	return h;
2070a3
 }
2070a3
@@ -357,8 +359,9 @@ add_chain(STRUCT_ENTRY *e, TC_HANDLE_T h, STRUCT_ENTRY **prev)
2070a3
 		h->cache_chain_heads[h->cache_num_chains-1].end
2070a3
 			= *prev;
2070a3
 
2070a3
-		strcpy(h->cache_chain_heads[h->cache_num_chains].name,
2070a3
-		       (const char *)GET_TARGET(e)->data);
2070a3
+		strncpy(h->cache_chain_heads[h->cache_num_chains].name,
2070a3
+		       (const char *)GET_TARGET(e)->data, TABLE_MAXNAMELEN-1);
2070a3
+		h->cache_chain_heads[h->cache_num_chains].name[TABLE_MAXNAMELEN-1] = '\0';
2070a3
 		h->cache_chain_heads[h->cache_num_chains].start
2070a3
 			= (void *)e + e->next_offset;
2070a3
 		h->cache_num_chains++;
2070a3
@@ -368,8 +371,9 @@ add_chain(STRUCT_ENTRY *e, TC_HANDLE_T h, STRUCT_ENTRY **prev)
2070a3
 			h->cache_chain_heads[h->cache_num_chains-1].end
2070a3
 				= *prev;
2070a3
 
2070a3
-		strcpy(h->cache_chain_heads[h->cache_num_chains].name,
2070a3
-		       h->hooknames[builtin-1]);
2070a3
+		strncpy(h->cache_chain_heads[h->cache_num_chains].name,
2070a3
+		       h->hooknames[builtin-1], TABLE_MAXNAMELEN-1);
2070a3
+		h->cache_chain_heads[h->cache_num_chains].name[TABLE_MAXNAMELEN-1] = '\0';
2070a3
 		h->cache_chain_heads[h->cache_num_chains].start
2070a3
 			= (void *)e;
2070a3
 		h->cache_num_chains++;