From nobody Tue Aug 1 17:29:10 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4RFhth0H4Zz4pfS5; Tue, 1 Aug 2023 17:29:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RFhtG6dshz4RlJ; Tue, 1 Aug 2023 17:29:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1690910951; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mFiq7HthptQeY02L9gmMBxAh7fYUBnxDtJZFiUB78Ts=; b=mqUkuB1ywKQaVgLvFscnm/CrfwD1KvNHEtH+Vvt0y4SrgJCfZiPtHQWiMRehNyWToebhPX d1EqCWUbpAQHohjyvMgWmJGx7WIyjQyOVyOLpR/SaD2J75L1sxUCBc67E2C6OF0VppPKUt YS16F+cAPCUnD81p+T5yfIgmWlQTFOhWlOrlh/Oo7B/jel71t4v7/PPwJMdrO/EhV3nhNH ow+ie6GzAm9yGHhldDQS/UBLRWrP4k4Zkxao8QV28iS8qWnld2w/cQY5KyJdOp7lqlnam8 QdSCbeTo+wGHJ/W7G33rrA4OYQ6B5YlvbKnDSXxEoGP8lvJfqf3ZWvS9Vm+raA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1690910951; a=rsa-sha256; cv=none; b=sSo1+1XwbgjkP0xhxxffkDDn4m0v+qgvqgWIXAD/QXFL8pUgGvjX9QoD+RYZmBimHVziUJ Z6RDVETey8azu45REfLClbYjgqFa363hM7+p6Sv1ZI1KS/6SRVGCPum50fNWQ9Cm1NiVsF wugjKX3CokpV701Rjea+5v1pbv+I2cpPgXfUS3rCX6Bbqzv2IY9Aw0pcpzmnAR24+lGtv8 1mt/dZl4Bzw0iImr+DcbakABpb+fXq8WmhvHFbX9ScP0gTVyp0hVegjulbx64Cjwpfmsfi 7ReypWZwziL8iONwpFwJUQ14mdSjFfOCzOziN5vsIhslJdXcR6TL/agir/bUxg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1690910951; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mFiq7HthptQeY02L9gmMBxAh7fYUBnxDtJZFiUB78Ts=; b=RyJAP8AHGBLZCVMWpBJW70bU8peMdj3DeryCmAdZIP7jQzY3ozz8ZnwWGXHqzzaAsl12tq gFIpi3OMtsT4BJ3HyEOzGYgSBzXHYOseDldG0vCHW/veg7mH5kpFl00wfjE4EfkzPEOiwi D+q1tWd+GPwAITJO2RN610o+3BeC7zfaxdAfbyVFarKXxVYm0REz/tCr19VDA3f7CuYDMg xvlD/lz7gZL1JDcjsBfKSULXMGeMG78kmMpmqGPNpzsl4Cft3VvOIpsmbu2sJFsdsumXas L9LhTnt6Q9dJI746KrbVB1M3PxAf3n4TWDo62wVeJf/Zu0IiHmDm1Jlm8wWLCw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RFhtG1kxxzm9H; Tue, 1 Aug 2023 17:29:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 371HTAkg046911; Tue, 1 Aug 2023 17:29:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 371HTApA046910; Tue, 1 Aug 2023 17:29:10 GMT (envelope-from git) Date: Tue, 1 Aug 2023 17:29:10 GMT Message-Id: <202308011729.371HTApA046910@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Eric van Gyzen Subject: git: bcbce2a29b89 - main - dtrace: do not overload libproc flags List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: vangyzen X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: bcbce2a29b892ac10291f652b271963e08d641a8 Auto-Submitted: auto-generated The branch main has been updated by vangyzen: URL: https://cgit.FreeBSD.org/src/commit/?id=bcbce2a29b892ac10291f652b271963e08d641a8 commit bcbce2a29b892ac10291f652b271963e08d641a8 Author: Eric van Gyzen AuthorDate: 2023-07-25 16:59:07 +0000 Commit: Eric van Gyzen CommitDate: 2023-08-01 17:28:50 +0000 dtrace: do not overload libproc flags dtrace stored its PR_RLC and PR_KLC flags in the proc_handle's flags, where they collided with PATTACH_FORCE and PATTACH_RDONLY, respectively. Thus, Psetflags(PR_KLC) effectively also set the PATTACH_RDONLY flag. Since the flags are private to dtrace (at least on FreeBSD), store them in dtrace's own dt_proc structure instead. On FreeBSD, either PR_RLC or PR_KLC was always set, so remove code that would handle the case where neither was set. Reviewed by: markj MFC after: 1 week Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D41121 --- cddl/compat/opensolaris/include/libproc.h | 3 -- .../opensolaris/lib/libdtrace/common/dt_proc.c | 36 +++++++++------------- .../opensolaris/lib/libdtrace/common/dt_proc.h | 6 ++++ cddl/lib/libdtrace/libproc_compat.h | 2 -- 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/cddl/compat/opensolaris/include/libproc.h b/cddl/compat/opensolaris/include/libproc.h index 428fa6cf53fe..92c6d6ab0323 100644 --- a/cddl/compat/opensolaris/include/libproc.h +++ b/cddl/compat/opensolaris/include/libproc.h @@ -35,9 +35,6 @@ #define ps_prochandle proc_handle #define Lmid_t int -#define PR_RLC 0x0001 -#define PR_KLC 0x0002 - #include_next #endif diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c index 40b1f4108d1a..958d6ca34e85 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c @@ -490,10 +490,11 @@ dt_proc_control(void *arg) dt_proc_attach(dpr, B_FALSE); /* enable rtld breakpoints */ /* - * If PR_KLC is set, we created the process; otherwise we grabbed it. - * Check for an appropriate stop request and wait for dt_proc_continue. + * If DT_CLOSE_KILL is set, we created the process; otherwise we + * grabbed it. Check for an appropriate stop request and wait for + * dt_proc_continue. */ - if (proc_getflags(P) & PR_KLC) + if (dpr->dpr_close == DT_CLOSE_KILL) dt_proc_stop(dpr, DT_PROC_STOP_CREATE); else dt_proc_stop(dpr, DT_PROC_STOP_GRAB); @@ -586,7 +587,7 @@ dt_proc_control(void *arg) } if (Pstate(P) != PS_UNDEAD) { - if (dpr->dpr_quit && (proc_getflags(P) & PR_KLC)) { + if (dpr->dpr_quit && dpr->dpr_close == DT_CLOSE_KILL) { /* * We're about to kill the child, so don't * bother resuming it. In some cases, such as @@ -678,20 +679,15 @@ dt_proc_destroy(dtrace_hdl_t *dtp, struct ps_prochandle *P) assert(dpr != NULL); - /* - * If neither PR_KLC nor PR_RLC is set, then the process is stopped by - * an external debugger and we were waiting in dt_proc_waitrun(). - * Leave the process in this condition using PRELEASE_HANG. - */ - if (!(proc_getflags(dpr->dpr_proc) & (PR_KLC | PR_RLC))) { - dt_dprintf("abandoning pid %d\n", (int)dpr->dpr_pid); - rflag = PRELEASE_HANG; - } else if (proc_getflags(dpr->dpr_proc) & PR_KLC) { + switch (dpr->dpr_close) { + case DT_CLOSE_KILL: dt_dprintf("killing pid %d\n", (int)dpr->dpr_pid); - rflag = PRELEASE_KILL; /* apply kill-on-last-close */ - } else { + rflag = PRELEASE_KILL; + break; + case DT_CLOSE_RUN: dt_dprintf("releasing pid %d\n", (int)dpr->dpr_pid); - rflag = 0; /* apply run-on-last-close */ + rflag = 0; + break; } if (dpr->dpr_tid) { @@ -860,9 +856,7 @@ dt_proc_create(dtrace_hdl_t *dtp, const char *file, char *const *argv, dpr->dpr_hdl = dtp; dpr->dpr_pid = proc_getpid(dpr->dpr_proc); - - (void) Punsetflags(dpr->dpr_proc, PR_RLC); - (void) Psetflags(dpr->dpr_proc, PR_KLC); + dpr->dpr_close = DT_CLOSE_KILL; if (dt_proc_create_thread(dtp, dpr, dtp->dt_prcmode) != 0) return (NULL); /* dt_proc_error() has been called for us */ @@ -927,9 +921,7 @@ dt_proc_grab(dtrace_hdl_t *dtp, pid_t pid, int flags, int nomonitor) dpr->dpr_hdl = dtp; dpr->dpr_pid = pid; - - (void) Punsetflags(dpr->dpr_proc, PR_KLC); - (void) Psetflags(dpr->dpr_proc, PR_RLC); + dpr->dpr_close = DT_CLOSE_RUN; /* * If we are attempting to grab the process without a monitor diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.h b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.h index beae6f6d5cda..458e9902881f 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.h +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.h @@ -40,6 +40,11 @@ extern "C" { #endif +enum dt_close_action { + DT_CLOSE_RUN, + DT_CLOSE_KILL, +}; + typedef struct dt_proc { dt_list_t dpr_list; /* prev/next pointers for lru chain */ struct dt_proc *dpr_hash; /* next pointer for pid hash chain */ @@ -60,6 +65,7 @@ typedef struct dt_proc { uint8_t dpr_rdonly; /* proc flag: opened read-only */ pthread_t dpr_tid; /* control thread (or zero if none) */ dt_list_t dpr_bps; /* list of dt_bkpt_t structures */ + enum dt_close_action dpr_close; /* do this to child when exiting */ } dt_proc_t; typedef struct dt_proc_notify { diff --git a/cddl/lib/libdtrace/libproc_compat.h b/cddl/lib/libdtrace/libproc_compat.h index 14f32506bb8f..d2a04d143e7e 100644 --- a/cddl/lib/libdtrace/libproc_compat.h +++ b/cddl/lib/libdtrace/libproc_compat.h @@ -58,10 +58,8 @@ #define Prd_agent proc_rdagent #define Prelease proc_detach #define Psetbkpt proc_bkptset -#define Psetflags proc_setflags #define Pstate proc_state #define Psymbol_iter_by_addr proc_iter_symbyaddr -#define Punsetflags proc_clearflags #define Pupdate_maps proc_rdagent #define Pupdate_syms proc_updatesyms #define Pxecbkpt proc_bkptexec