On Tue, Apr 22, 2014 at 02:57:54AM -0400, pe...@petermalone.org wrote:

> Sure - I should have spotted that.

Still not there. Please use the fact that calloc can multiply, you get
an overflow check for free. 

        -Otto

> 
> Index: ping.c
> ===================================================================
> RCS file: /cvs/src/sbin/ping/ping.c,v
> retrieving revision 1.100
> diff -u -r1.100 ping.c
> --- ping.c      24 Mar 2014 11:11:49 -0000      1.100
> +++ ping.c      22 Apr 2014 06:55:03 -0000
> @@ -188,7 +188,6 @@
>         socklen_t maxsizelen;
>         const char *errstr;
>         fd_set *fdmaskp;
> -       size_t fdmasks;
>         uid_t uid;
>         u_int rtableid;
> 
> @@ -507,9 +506,8 @@
>         if ((options & F_FLOOD) == 0)
>                 catcher(0);             /* start things going */
> 
> -       fdmasks = howmany(s+1, NFDBITS) * sizeof(fd_mask);
> -       if ((fdmaskp = (fd_set *)malloc(fdmasks)) == NULL)
> -               err(1, "malloc");
> +       if ((fdmaskp = calloc(1, howmany(s+1, NFDBITS) * sizeof(fd_mask)))
> == NULL)
> +               err(1, "calloc");
> 
>         for (;;) {
>                 struct sockaddr_in from;
> @@ -521,7 +519,6 @@
>                         pinger();
>                         timeout.tv_sec = 0;
>                         timeout.tv_usec = 10000;
> -                       memset(fdmaskp, 0, fdmasks);
>                         FD_SET(s, fdmaskp);
>                         if (select(s + 1, (fd_set *)fdmaskp, (fd_set *)NULL,
>                             (fd_set *)NULL, &timeout) < 1)
> 
> 
> Quoting Otto Moerbeek <o...@drijf.net>:
> 
> >On Tue, Apr 22, 2014 at 12:45:25AM -0400, Peter Malone wrote:
> >
> >>Hi,
> >>
> >>malloc & memset can be replaced with calloc in ping.c. Please see below for
> >>patch details:
> >
> >Better rework this to get rid of fdmasks.
> >
> >     -Otto
> >
> >>
> >>Index: ping.c
> >>===================================================================
> >>RCS file: /cvs/src/sbin/ping/ping.c,v
> >>retrieving revision 1.100
> >>diff -u -p -u -r1.100 ping.c
> >>--- ping.c    24 Mar 2014 11:11:49 -0000    1.100
> >>+++ ping.c    22 Apr 2014 04:41:56 -0000
> >>@@ -508,8 +508,8 @@ main(int argc, char *argv[])
> >>         catcher(0);        /* start things going */
> >>
> >>     fdmasks = howmany(s+1, NFDBITS) * sizeof(fd_mask);
> >>-    if ((fdmaskp = (fd_set *)malloc(fdmasks)) == NULL)
> >>-        err(1, "malloc");
> >>+    if ((fdmaskp = calloc(1, fdmasks)) == NULL)
> >>+        err(1, "calloc");
> >>
> >>     for (;;) {
> >>         struct sockaddr_in from;
> >>@@ -521,7 +521,6 @@ main(int argc, char *argv[])
> >>             pinger();
> >>             timeout.tv_sec = 0;
> >>             timeout.tv_usec = 10000;
> >>-            memset(fdmaskp, 0, fdmasks);
> >>             FD_SET(s, fdmaskp);
> >>             if (select(s + 1, (fd_set *)fdmaskp, (fd_set *)NULL,
> >>                 (fd_set *)NULL, &timeout) < 1)
> >>
> >
> >
> 

Reply via email to