You can enable a bunch of warnings with WARNINGS=Yes in our tree.
On Dec 28, 2012 3:34 PM, "Kenneth R Westerback" <[email protected]>
wrote:

> On Thu, Dec 27, 2012 at 02:04:24PM +0100, Maxime Villard wrote:
> > Well, as no one seems to give a fuck on tech@, I put a more
> > glamourous title here.
> >
> > btw, i wonder why you don't put -Wextra to the makefile, you would
> > see that there are a lot of unused parameters, comparisons between
> > signed and unsigned, uninitialized vars, ...
>
> Too many false positives to be useful.
>
> People are running various static analysis packages over the tree
> periodically to find such things. None are perfect so if you actually
> find any you think are bugs, diffs are always appreciated.
>
> .... Ken
>
> >
> >
> > -------- Message original --------
> > Sujet: [PATCH] pfctl: leak & stuff
> > Date : Sat, 22 Dec 2012 08:16:09 +0100
> > De : Maxime Villard <[email protected]>
> > Pour : [email protected]
> >
> > Hi,
> > here are my small changes for pfctl.
> >
> > 1) There are cases where we could leak a file descriptor by
> >    returning.
> >
> > 2) We don't need to check memory before freeing it, as
> >    free() already does that.
> >
> > 3) Just replaced a snprintf() by strlcpy(), it's faster.
> >
> > Ok/Comments ?
> >
> >
> >
> > Index: pfctl.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/pfctl/pfctl.c,v
> > retrieving revision 1.314
> > diff -u -r1.314 pfctl.c
> > --- pfctl.c   19 Sep 2012 15:52:17 -0000      1.314
> > +++ pfctl.c   22 Dec 2012 07:08:28 -0000
> > @@ -1377,8 +1377,7 @@
> >                               err(1, "DIOCXROLLBACK");
> >               exit(1);
> >       } else {                /* sub ruleset */
> > -             if (path)
> > -                     free(path);
> > +             free(path);
> >               return (-1);
> >       }
> >
> > @@ -1867,10 +1866,6 @@
> >       unsigned int len = 0;
> >       size_t n;
> >
> > -     f = fopen(file, "w");
> > -     if (f == NULL)
> > -             err(1, "open: %s", file);
> > -
> >       memset(&ps, 0, sizeof(ps));
> >       for (;;) {
> >               ps.ps_len = len;
> > @@ -1893,6 +1888,10 @@
> >                       return; /* no states */
> >               len *= 2;
> >       }
> > +
> > +     f = fopen(file, "w");
> > +     if (f == NULL)
> > +             err(1, "open: %s", file);
> >
> >       n = ps.ps_len / sizeof(struct pfsync_state);
> >       if (fwrite(inbuf, sizeof(struct pfsync_state), n, f) < n)
> > Index: pfctl_osfp.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/pfctl/pfctl_osfp.c,v
> > retrieving revision 1.18
> > diff -u -r1.18 pfctl_osfp.c
> > --- pfctl_osfp.c      18 Oct 2010 15:55:28 -0000      1.18
> > +++ pfctl_osfp.c      22 Dec 2012 07:08:28 -0000
> > @@ -112,16 +112,11 @@
> >
> >       while ((line = fgetln(in, &len)) != NULL) {
> >               lineno++;
> > -             if (class)
> > -                     free(class);
> > -             if (version)
> > -                     free(version);
> > -             if (subtype)
> > -                     free(subtype);
> > -             if (desc)
> > -                     free(desc);
> > -             if (tcpopts)
> > -                     free(tcpopts);
> > +             free(class);
> > +             free(version);
> > +             free(subtype);
> > +             free(desc);
> > +             free(tcpopts);
> >               class = version = subtype = desc = tcpopts = NULL;
> >               memset(&fp, 0, sizeof(fp));
> >
> > @@ -250,16 +245,11 @@
> >               add_fingerprint(dev, opts, &fp);
> >       }
> >
> > -     if (class)
> > -             free(class);
> > -     if (version)
> > -             free(version);
> > -     if (subtype)
> > -             free(subtype);
> > -     if (desc)
> > -             free(desc);
> > -     if (tcpopts)
> > -             free(tcpopts);
> > +     free(class);
> > +     free(version);
> > +     free(subtype);
> > +     free(desc);
> > +     free(tcpopts);
> >
> >       fclose(in);
> >
> > @@ -513,7 +503,7 @@
> >       return (buf);
> >
> >  found:
> > -     snprintf(buf, len, "%s", class_name);
> > +     strlcpy(buf, class_name, len);
> >       if (version_name) {
> >               strlcat(buf, " ", len);
> >               strlcat(buf, version_name, len);
> > Index: pfctl_radix.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/pfctl/pfctl_radix.c,v
> > retrieving revision 1.29
> > diff -u -r1.29 pfctl_radix.c
> > --- pfctl_radix.c     27 Jul 2011 00:26:10 -0000      1.29
> > +++ pfctl_radix.c     22 Dec 2012 07:08:28 -0000
> > @@ -499,8 +499,7 @@
> >  {
> >       if (b == NULL)
> >               return;
> > -     if (b->pfrb_caddr != NULL)
> > -             free(b->pfrb_caddr);
> > +     free(b->pfrb_caddr);
> >       b->pfrb_caddr = NULL;
> >       b->pfrb_size = b->pfrb_msize = 0;
> >  }

Reply via email to