svn commit: r299136 - head/sys/netpfil/ipfw

Andrey V. Elsukov ae at FreeBSD.org
Thu May 5 20:15:47 UTC 2016


Author: ae
Date: Thu May  5 20:15:46 2016
New Revision: 299136
URL: https://svnweb.freebsd.org/changeset/base/299136

Log:
  Rename find_name_tlv_type() to ipfw_find_name_tlv_type() and make it
  global. Use it in ip_fw_table.c instead of find_name_tlv() to reduce
  duplicated code.
  
  Obtained from:	Yandex LLC
  Sponsored by:	Yandex LLC

Modified:
  head/sys/netpfil/ipfw/ip_fw_private.h
  head/sys/netpfil/ipfw/ip_fw_sockopt.c
  head/sys/netpfil/ipfw/ip_fw_table.c

Modified: head/sys/netpfil/ipfw/ip_fw_private.h
==============================================================================
--- head/sys/netpfil/ipfw/ip_fw_private.h	Thu May  5 19:56:18 2016	(r299135)
+++ head/sys/netpfil/ipfw/ip_fw_private.h	Thu May  5 20:15:46 2016	(r299136)
@@ -684,6 +684,8 @@ void ipfw_objhash_set_funcs(struct named
 int ipfw_objhash_find_type(struct namedobj_instance *ni, struct tid_info *ti,
     uint32_t etlv, struct named_object **pno);
 void ipfw_export_obj_ntlv(struct named_object *no, ipfw_obj_ntlv *ntlv);
+ipfw_obj_ntlv *ipfw_find_name_tlv_type(void *tlvs, int len, uint16_t uidx,
+    uint32_t etlv);
 void ipfw_init_obj_rewriter(void);
 void ipfw_destroy_obj_rewriter(void);
 void ipfw_add_obj_rewriter(struct opcode_obj_rewrite *rw, size_t count);

Modified: head/sys/netpfil/ipfw/ip_fw_sockopt.c
==============================================================================
--- head/sys/netpfil/ipfw/ip_fw_sockopt.c	Thu May  5 19:56:18 2016	(r299135)
+++ head/sys/netpfil/ipfw/ip_fw_sockopt.c	Thu May  5 20:15:46 2016	(r299136)
@@ -4089,8 +4089,8 @@ ipfw_objhash_lookup_name(struct namedobj
  *
  * Returns pointer to found TLV or NULL.
  */
-static ipfw_obj_ntlv *
-find_name_tlv_type(void *tlvs, int len, uint16_t uidx, uint32_t etlv)
+ipfw_obj_ntlv *
+ipfw_find_name_tlv_type(void *tlvs, int len, uint16_t uidx, uint32_t etlv)
 {
 	ipfw_obj_ntlv *ntlv;
 	uintptr_t pa, pe;
@@ -4145,7 +4145,7 @@ ipfw_objhash_find_type(struct namedobj_i
 	if (ti->tlvs == NULL)
 		return (EINVAL);
 
-	ntlv = find_name_tlv_type(ti->tlvs, ti->tlen, ti->uidx, etlv);
+	ntlv = ipfw_find_name_tlv_type(ti->tlvs, ti->tlen, ti->uidx, etlv);
 	if (ntlv == NULL)
 		return (EINVAL);
 	name = ntlv->name;

Modified: head/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- head/sys/netpfil/ipfw/ip_fw_table.c	Thu May  5 19:56:18 2016	(r299135)
+++ head/sys/netpfil/ipfw/ip_fw_table.c	Thu May  5 20:15:46 2016	(r299136)
@@ -1879,7 +1879,6 @@ create_table(struct ip_fw_chain *ch, ip_
 /*
  * Creates new table based on @ti and @aname.
  *
- * Relies on table name checking inside find_name_tlv()
  * Assume @aname to be checked and valid.
  * Stores allocated table kidx inside @pkidx (if non-NULL).
  * Reference created table if @compat is non-zero.
@@ -2927,44 +2926,6 @@ check_table_name(const char *name)
 }
 
 /*
- * Find tablename TLV by @uid.
- * Check @tlvs for valid data inside.
- *
- * Returns pointer to found TLV or NULL.
- */
-static ipfw_obj_ntlv *
-find_name_tlv(void *tlvs, int len, uint16_t uidx)
-{
-	ipfw_obj_ntlv *ntlv;
-	uintptr_t pa, pe;
-	int l;
-
-	pa = (uintptr_t)tlvs;
-	pe = pa + len;
-	l = 0;
-	for (; pa < pe; pa += l) {
-		ntlv = (ipfw_obj_ntlv *)pa;
-		l = ntlv->head.length;
-
-		if (l != sizeof(*ntlv))
-			return (NULL);
-
-		if (ntlv->head.type != IPFW_TLV_TBL_NAME)
-			continue;
-
-		if (ntlv->idx != uidx)
-			continue;
-
-		if (check_table_name(ntlv->name) != 0)
-			return (NULL);
-		
-		return (ntlv);
-	}
-
-	return (NULL);
-}
-
-/*
  * Finds table config based on either legacy index
  * or name in ntlv.
  * Note @ti structure contains unchecked data from userland.
@@ -2981,7 +2942,8 @@ find_table_err(struct namedobj_instance 
 	uint32_t set;
 
 	if (ti->tlvs != NULL) {
-		ntlv = find_name_tlv(ti->tlvs, ti->tlen, ti->uidx);
+		ntlv = ipfw_find_name_tlv_type(ti->tlvs, ti->tlen, ti->uidx,
+		    IPFW_TLV_TBL_NAME);
 		if (ntlv == NULL)
 			return (EINVAL);
 		name = ntlv->name;
@@ -3039,7 +3001,8 @@ alloc_table_config(struct ip_fw_chain *c
 	uint32_t set;
 
 	if (ti->tlvs != NULL) {
-		ntlv = find_name_tlv(ti->tlvs, ti->tlen, ti->uidx);
+		ntlv = ipfw_find_name_tlv_type(ti->tlvs, ti->tlen, ti->uidx,
+		    IPFW_TLV_TBL_NAME);
 		if (ntlv == NULL)
 			return (NULL);
 		name = ntlv->name;


More information about the svn-src-all mailing list