OK bcook@

On Fri, Dec 2, 2016 at 10:29 AM, Rafael Zalamena <rzalam...@gmail.com>
wrote:

> On Sat, Oct 01, 2016 at 07:05:51PM +0200, Rafael Zalamena wrote:
> > The ntpd(8) constraint fork+exec diff changed the way the constraint
> > processes are created, but then it introduced new calloc()s to avoid
> > increasing diff size and to focus on the problem. Now that the fork+exec
> > is in, this diff make those variables to become a part of the stack.
> >
> > No functional changes, just changing variables storage location.
> >
> > ok?
>
> Ping.
>
> Updated diff to apply on the latest ntpd sources.
>
> ok?
>
> Index: usr.sbin/ntpd//constraint.c
> ===================================================================
> RCS file: /home/obsdcvs/src/usr.sbin/ntpd/constraint.c,v
> retrieving revision 1.34
> diff -u -p -r1.34 constraint.c
> --- usr.sbin/ntpd//constraint.c 18 Oct 2016 22:05:47 -0000      1.34
> +++ usr.sbin/ntpd//constraint.c 2 Dec 2016 16:27:15 -0000
> @@ -321,8 +321,8 @@ priv_constraint_readquery(struct constra
>  void
>  priv_constraint_child(const char *pw_dir, uid_t pw_uid, gid_t pw_gid)
>  {
> -       struct constraint       *cstr;
> -       struct ntp_addr_msg     *am;
> +       struct constraint        cstr;
> +       struct ntp_addr_msg      am;
>         uint8_t                 *data;
>         static char              addr[NI_MAXHOST];
>         struct timeval           rectv, xmttv;
> @@ -336,10 +336,6 @@ priv_constraint_child(const char *pw_dir
>         if (setpriority(PRIO_PROCESS, 0, 0) == -1)
>                 log_warn("could not set priority");
>
> -       if ((cstr = calloc(1, sizeof(*cstr))) == NULL ||
> -           (am = calloc(1, sizeof(*am))) == NULL)
> -               fatal("%s: calloc", __func__);
> -
>         /* Init TLS and load CA certs before chroot() */
>         if (tls_init() == -1)
>                 fatalx("tls_init");
> @@ -368,9 +364,9 @@ priv_constraint_child(const char *pw_dir
>         if (pledge("stdio inet", NULL) == -1)
>                 fatal("pledge");
>
> -       cstr->fd = CONSTRAINT_PASSFD;
> -       imsg_init(&cstr->ibuf, cstr->fd);
> -       priv_constraint_readquery(cstr, am, &data);
> +       cstr.fd = CONSTRAINT_PASSFD;
> +       imsg_init(&cstr.ibuf, cstr.fd);
> +       priv_constraint_readquery(&cstr, &am, &data);
>
>         /*
>          * Get the IP address as name and set the process title
> accordingly.
> @@ -378,8 +374,8 @@ priv_constraint_child(const char *pw_dir
>          * any DNS operation, so it is safe to be called without the dns
>          * pledge.
>          */
> -       if (getnameinfo((struct sockaddr *)&cstr->addr->ss,
> -           SA_LEN((struct sockaddr *)&cstr->addr->ss),
> +       if (getnameinfo((struct sockaddr *)&cstr.addr->ss,
> +           SA_LEN((struct sockaddr *)&cstr.addr->ss),
>             addr, sizeof(addr), NULL, 0,
>             NI_NUMERICHOST) != 0)
>                 fatalx("%s getnameinfo", __func__);
> @@ -398,21 +394,21 @@ priv_constraint_child(const char *pw_dir
>                 fatal("%s fcntl F_SETFD", __func__);
>
>         /* Get remaining data from imsg in the unpriv child */
> -       if (am->namelen) {
> -               if ((cstr->addr_head.name =
> -                   get_string(data, am->namelen)) == NULL)
> +       if (am.namelen) {
> +               if ((cstr.addr_head.name =
> +                   get_string(data, am.namelen)) == NULL)
>                         fatalx("invalid IMSG_CONSTRAINT_QUERY name");
> -               data += am->namelen;
> +               data += am.namelen;
>         }
> -       if (am->pathlen) {
> -               if ((cstr->addr_head.path =
> -                   get_string(data, am->pathlen)) == NULL)
> +       if (am.pathlen) {
> +               if ((cstr.addr_head.path =
> +                   get_string(data, am.pathlen)) == NULL)
>                         fatalx("invalid IMSG_CONSTRAINT_QUERY path");
>         }
>
>         /* Run! */
>         if ((ctx = httpsdate_query(addr,
> -           CONSTRAINT_PORT, cstr->addr_head.name, cstr->addr_head.path,
> +           CONSTRAINT_PORT, cstr.addr_head.name, cstr.addr_head.path,
>             conf->ca, conf->ca_len, &rectv, &xmttv)) == NULL) {
>                 /* Abort with failure but without warning */
>                 exit(1);
> @@ -422,10 +418,10 @@ priv_constraint_child(const char *pw_dir
>         iov[0].iov_len = sizeof(rectv);
>         iov[1].iov_base = &xmttv;
>         iov[1].iov_len = sizeof(xmttv);
> -       imsg_composev(&cstr->ibuf,
> +       imsg_composev(&cstr.ibuf,
>             IMSG_CONSTRAINT_RESULT, 0, 0, -1, iov, 2);
>         do {
> -               rv = imsg_flush(&cstr->ibuf);
> +               rv = imsg_flush(&cstr.ibuf);
>         } while (rv == -1 && errno == EAGAIN);
>
>         /* Tear down the TLS connection after sending the result */
>
>

Reply via email to