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