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

Alexander V. Chernikov melifaro at FreeBSD.org
Mon Oct 20 11:21:08 UTC 2014


Author: melifaro
Date: Mon Oct 20 11:21:07 2014
New Revision: 273327
URL: https://svnweb.freebsd.org/changeset/base/273327

Log:
  Use copyout() directly instead of updating various fields
  before/after each sooptcopyout() call.
  
  Found by:	luigi
  Sponsored by:	Yandex LLC

Modified:
  head/sys/netpfil/ipfw/ip_fw_sockopt.c

Modified: head/sys/netpfil/ipfw/ip_fw_sockopt.c
==============================================================================
--- head/sys/netpfil/ipfw/ip_fw_sockopt.c	Mon Oct 20 08:59:30 2014	(r273326)
+++ head/sys/netpfil/ipfw/ip_fw_sockopt.c	Mon Oct 20 11:21:07 2014	(r273327)
@@ -2535,30 +2535,33 @@ ipfw_del_sopt_handler(struct ipfw_sopt_h
 static int
 ipfw_flush_sopt_data(struct sockopt_data *sd)
 {
-#define	RULE_MAXSIZE	(512*sizeof(u_int32_t))
+	struct sockopt *sopt;
 	int error;
 	size_t sz;
 
-	if ((sz = sd->koff) == 0)
+	sz = sd->koff;
+	if (sz == 0)
 		return (0);
 
-	if (sd->sopt->sopt_dir == SOPT_GET) {
-		error = sooptcopyout(sd->sopt, sd->kbuf, sz);
+	sopt = sd->sopt;
+
+	if (sopt->sopt_dir == SOPT_GET) {
+		error = copyout(sd->kbuf, sopt->sopt_val, sz);
 		if (error != 0)
 			return (error);
 	}
 
 	memset(sd->kbuf, 0, sd->ksize);
-	sd->ktotal += sd->koff;
+	sd->ktotal += sz;
 	sd->koff = 0;
 	if (sd->ktotal + sd->ksize < sd->valsize)
 		sd->kavail = sd->ksize;
 	else
 		sd->kavail = sd->valsize - sd->ktotal;
 
-	/* Update sopt buffer */
-	sd->sopt->sopt_valsize = sd->ktotal;
-	sd->sopt->sopt_val = sd->sopt_val + sd->ktotal;
+	/* Update sopt buffer data */
+	sopt->sopt_valsize = sd->ktotal;
+	sopt->sopt_val = sd->sopt_val + sd->ktotal;
 
 	return (0);
 }


More information about the svn-src-head mailing list