On Wed, Mar 01, 2023 at 04:31:07PM -0700, Todd C. Miller wrote:
> The SIGHUP handler only sets a flag these days, there is no longer
> any need to block it while using the exports list.
>
> OK?
OK bluhm@
In the previous version of the diff you also eliminated the useless
newline in new_exportlist().
> Index: sbin/mountd/mountd.c
> ===================================================================
> RCS file: /cvs/src/sbin/mountd/mountd.c,v
> retrieving revision 1.90
> diff -u -p -u -r1.90 mountd.c
> --- sbin/mountd/mountd.c 1 Mar 2023 23:27:46 -0000 1.90
> +++ sbin/mountd/mountd.c 1 Mar 2023 23:29:18 -0000
> @@ -736,7 +736,6 @@ mntsrv(struct svc_req *rqstp, SVCXPRT *t
> char rpcpath[RPCMNT_PATHLEN+1], dirpath[PATH_MAX];
> struct hostent *hp = NULL;
> struct exportlist *ep;
> - sigset_t sighup_mask;
> int defset, hostset;
> struct fhreturn fhr;
> struct dirlist *dp;
> @@ -746,8 +745,6 @@ mntsrv(struct svc_req *rqstp, SVCXPRT *t
> u_short sport;
> long bad = 0;
>
> - sigemptyset(&sighup_mask);
> - sigaddset(&sighup_mask, SIGHUP);
> saddr = transp->xp_raddr.sin_addr.s_addr;
> sport = ntohs(transp->xp_raddr.sin_port);
> switch (rqstp->rq_proc) {
> @@ -792,7 +789,6 @@ mntsrv(struct svc_req *rqstp, SVCXPRT *t
> }
>
> /* Check in the exports list */
> - sigprocmask(SIG_BLOCK, &sighup_mask, NULL);
> ep = bad ? NULL : ex_search(&fsb.f_fsid);
> hostset = defset = 0;
> if (ep && (chk_host(ep->ex_defdir, saddr, &defset, &hostset) ||
> @@ -804,7 +800,6 @@ mntsrv(struct svc_req *rqstp, SVCXPRT *t
> if (!svc_sendreply(transp, xdr_long,
> (caddr_t)&bad))
> syslog(LOG_ERR, "Can't send reply");
> - sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
> return;
> }
> if (hostset & DP_HOSTSET)
> @@ -820,7 +815,6 @@ mntsrv(struct svc_req *rqstp, SVCXPRT *t
> if (!svc_sendreply(transp, xdr_long,
> (caddr_t)&bad))
> syslog(LOG_ERR, "Can't send reply");
> - sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
> return;
> }
> if (!svc_sendreply(transp, xdr_fhs, (caddr_t)&fhr))
> @@ -844,7 +838,6 @@ mntsrv(struct svc_req *rqstp, SVCXPRT *t
>
> if (bad && !svc_sendreply(transp, xdr_long, (caddr_t)&bad))
> syslog(LOG_ERR, "Can't send reply");
> - sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
> return;
> case RPCMNT_DUMP:
> if (!svc_sendreply(transp, xdr_mlist, NULL))
> @@ -958,11 +951,7 @@ xdr_explist(XDR *xdrsp, caddr_t cp)
> {
> struct exportlist *ep;
> int false = 0, putdef;
> - sigset_t sighup_mask;
>
> - sigemptyset(&sighup_mask);
> - sigaddset(&sighup_mask, SIGHUP);
> - sigprocmask(SIG_BLOCK, &sighup_mask, NULL);
> ep = exphead;
> while (ep) {
> putdef = 0;
> @@ -973,12 +962,10 @@ xdr_explist(XDR *xdrsp, caddr_t cp)
> goto errout;
> ep = ep->ex_next;
> }
> - sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
> if (!xdr_bool(xdrsp, &false))
> return (0);
> return (1);
> errout:
> - sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
> return (0);
> }
>