From nobody Wed Jul 06 11:04:02 2022 X-Original-To: dev-commits-src-branches@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 712DE1D00B20; Wed, 6 Jul 2022 11:04:04 +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 4LdGrM27plz3NFZ; Wed, 6 Jul 2022 11:04:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1657105443; 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=xCiM0yC9h08wOflayDND/JbPsiG8XwBraGdqrMy+GKU=; b=nryzaqBA3Cu031HLw5WvbX6MqyWgLquRSP6Vgd11i4T1092MavUFYllFzhvx964+thD13W 5bbUz/oYJSoNcoJ8C0sclTC5OfRFtOQsu9WYPwNW1YDZpriIoYyYskgdaWg1M7ymy4jG1C E3RSn4GOLjbk4LE2x9hr9sivBFB3Bn6yTB/Apv2M27KQh7TnQx48MMwuUnok+u5h//95AB WiwxG9Qr2aKbIjLx26PO+os/XK2VveZniGIiIcc7jL4Cg+qYPyGNMpavGZVTGVQrZWr4Si JfbaYr+cawGRgwZUe+5ylRpg2+j70ZVAcLYmvT44m2g5nK3bI0y99mKIOvT+pg== 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 0AAC0192C8; Wed, 6 Jul 2022 11:04:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 266B42GD096477; Wed, 6 Jul 2022 11:04:02 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 266B42Xs096476; Wed, 6 Jul 2022 11:04:02 GMT (envelope-from git) Date: Wed, 6 Jul 2022 11:04:02 GMT Message-Id: <202207061104.266B42Xs096476@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dmitry Chagin Subject: git: 828757743485 - stable/13 - linux(4): Trace Linux l_sigset_t. List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dchagin X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 8287577434850907ce7fde00216a65ed042a6e6b Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1657105443; 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=xCiM0yC9h08wOflayDND/JbPsiG8XwBraGdqrMy+GKU=; b=bv5v76SWV7lKsQ8mIn2TSD6Dc500iNjeao5PF0ek3nvkfyY5lpc0KWzahKqASU2Yr0g9yX RmBS1r8I3iqy7KWAAt1OPUo8/cuSgmEJZyIoLhZ/R9pc2cqPEQg36q5Py7Gl08KtaRMdcW WDuki/Px+oNtXgIZ3DpWfCkMEBXGTCOqn0ly6inUG+awmiV3oisq3s3c9aOSuy5EJI3Wdm QBC6OG+4AalQFR4Dny5Mid5MPPstT/otVY+jfwgu/mvCx1GtX36K8ZG8l1FpPgmJRNvc8A S3DpsclCnKgP7nb9KAxmmCe04Bp3r6WorWcRvuVaspQCEpkf/84wjcQkwxeFkg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1657105443; a=rsa-sha256; cv=none; b=jRFEKKr3v7t/vlN76wRiU4+a0qbs1BthzZ7YBcGZ3td90v8sytFKF3fGzP+eDyPmjDEjgl 47AAYOLwbCZVQfaSIhRoNpb6lUXogKw9EVGz3YKdow8PPqZTG45VfGlNnsRYgnaUt+8FTA F5Wh4q2apN/QLXzz5y6S0zQAucGIPaWIjWbAvWd7qedBjNXaOIn+ILa4gv6epxxML8o5J0 iiCO17EX0UBTBaD2RBNZXHO2sPNyr7G++CzmZu12QBbT9BEQknkmBoHZ6FoEeeNRb6qPo9 +1ZciXUDqSawuIHc5PNcKc5NbZcDXcRvQfxE0xnbMTkMglAUrnFGjR0sJ6jHAg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by dchagin: URL: https://cgit.FreeBSD.org/src/commit/?id=8287577434850907ce7fde00216a65ed042a6e6b commit 8287577434850907ce7fde00216a65ed042a6e6b Author: Dmitry Chagin AuthorDate: 2022-06-22 11:09:54 +0000 Commit: Dmitry Chagin CommitDate: 2022-07-06 11:02:13 +0000 linux(4): Trace Linux l_sigset_t. MFC after: 2 weeks (cherry picked from commit 9310737333eb9e1a15340c10ea3fd68e0ccdcfa9) --- sys/compat/linux/linux.h | 5 ++++ sys/compat/linux/linux_event.c | 6 ++-- sys/compat/linux/linux_misc.c | 4 +-- sys/compat/linux/linux_signal.c | 64 +++++++++++++++++++++++++++++++++++------ sys/compat/linux/linux_signal.h | 3 +- 5 files changed, 68 insertions(+), 14 deletions(-) diff --git a/sys/compat/linux/linux.h b/sys/compat/linux/linux.h index cf250e29d278..72bcb25bd05a 100644 --- a/sys/compat/linux/linux.h +++ b/sys/compat/linux/linux.h @@ -266,4 +266,9 @@ struct l_statx { #define lower_32_bits(n) ((uint32_t)((n) & 0xffffffff)) +#ifdef KTRACE +#define linux_ktrsigset(s, l) \ + ktrstruct("l_sigset_t", (s), l) +#endif + #endif /* _LINUX_MI_H_ */ diff --git a/sys/compat/linux/linux_event.c b/sys/compat/linux/linux_event.c index 05df4401dbab..f720c471a27b 100644 --- a/sys/compat/linux/linux_event.c +++ b/sys/compat/linux/linux_event.c @@ -526,7 +526,7 @@ linux_epoll_pwait(struct thread *td, struct linux_epoll_pwait_args *args) sigset_t mask, *pmask; int error; - error = linux_copyin_sigset(args->mask, sizeof(l_sigset_t), + error = linux_copyin_sigset(td, args->mask, sizeof(l_sigset_t), &mask, &pmask); if (error != 0) return (error); @@ -543,7 +543,7 @@ linux_epoll_pwait2_64(struct thread *td, struct linux_epoll_pwait2_64_args *args sigset_t mask, *pmask; int error; - error = linux_copyin_sigset(args->mask, sizeof(l_sigset_t), + error = linux_copyin_sigset(td, args->mask, sizeof(l_sigset_t), &mask, &pmask); if (error != 0) return (error); @@ -567,7 +567,7 @@ linux_epoll_pwait2(struct thread *td, struct linux_epoll_pwait2_args *args) sigset_t mask, *pmask; int error; - error = linux_copyin_sigset(args->mask, sizeof(l_sigset_t), + error = linux_copyin_sigset(td, args->mask, sizeof(l_sigset_t), &mask, &pmask); if (error != 0) return (error); diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c index b041c0467345..036c02616de4 100644 --- a/sys/compat/linux/linux_misc.c +++ b/sys/compat/linux/linux_misc.c @@ -2429,7 +2429,7 @@ linux_common_pselect6(struct thread *td, l_int nfds, l_fd_set *readfds, error = copyin(sig, &lpse6, sizeof(lpse6)); if (error != 0) return (error); - error = linux_copyin_sigset(PTRIN(lpse6.ss), + error = linux_copyin_sigset(td, PTRIN(lpse6.ss), lpse6.ss_len, &ss, &ssp); if (error != 0) return (error); @@ -2530,7 +2530,7 @@ linux_common_ppoll(struct thread *td, struct pollfd *fds, uint32_t nfds, if (kern_poll_maxfds(nfds)) return (EINVAL); if (sset != NULL) { - error = linux_copyin_sigset(sset, ssize, &ss, &ssp); + error = linux_copyin_sigset(td, sset, ssize, &ss, &ssp); if (error != 0) return (error); } else diff --git a/sys/compat/linux/linux_signal.c b/sys/compat/linux/linux_signal.c index bb20c6211e9b..a1bbfa2cfa07 100644 --- a/sys/compat/linux/linux_signal.c +++ b/sys/compat/linux/linux_signal.c @@ -29,6 +29,8 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_ktrace.h" + #include #include #include @@ -39,6 +41,9 @@ __FBSDID("$FreeBSD$"); #include #include #include +#ifdef KTRACE +#include +#endif #include @@ -176,6 +181,11 @@ linux_do_sigaction(struct thread *td, int linux_sig, l_sigaction_t *linux_nsa, if (linux_nsa != NULL) { nsa = &act; linux_to_bsd_sigaction(linux_nsa, nsa); +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + linux_ktrsigset(&linux_nsa->lsa_mask, + sizeof(linux_nsa->lsa_mask)); +#endif } else nsa = NULL; sig = linux_to_bsd_signal(linux_sig); @@ -184,9 +194,14 @@ linux_do_sigaction(struct thread *td, int linux_sig, l_sigaction_t *linux_nsa, if (error != 0) return (error); - if (linux_osa != NULL) + if (linux_osa != NULL) { bsd_to_linux_sigaction(osa, linux_osa); - +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + linux_ktrsigset(&linux_osa->lsa_mask, + sizeof(linux_osa->lsa_mask)); +#endif + } return (0); } @@ -308,6 +323,10 @@ linux_sigprocmask(struct thread *td, struct linux_sigprocmask_args *args) return (error); LINUX_SIGEMPTYSET(lset); lset.__mask = mask; +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + linux_ktrsigset(&lset, sizeof(lset)); +#endif linux_to_bsd_sigset(&lset, &set); } @@ -316,6 +335,10 @@ linux_sigprocmask(struct thread *td, struct linux_sigprocmask_args *args) args->omask ? &oset : NULL); if (args->omask != NULL && error == 0) { +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + linux_ktrsigset(&oset, sizeof(oset)); +#endif mask = oset.__mask; error = copyout(&mask, args->omask, sizeof(mask)); } @@ -331,7 +354,7 @@ linux_rt_sigprocmask(struct thread *td, struct linux_rt_sigprocmask_args *args) sigset_t set, *pset; int error; - error = linux_copyin_sigset(args->mask, args->sigsetsize, + error = linux_copyin_sigset(td, args->mask, args->sigsetsize, &set, &pset); if (error != 0) return (EINVAL); @@ -339,8 +362,13 @@ linux_rt_sigprocmask(struct thread *td, struct linux_rt_sigprocmask_args *args) error = linux_do_sigprocmask(td, args->how, pset, args->omask ? &oset : NULL); - if (args->omask != NULL && error == 0) + if (args->omask != NULL && error == 0) { +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + linux_ktrsigset(&oset, sizeof(oset)); +#endif error = copyout(&oset, args->omask, sizeof(oset)); + } return (error); } @@ -356,6 +384,10 @@ linux_sgetmask(struct thread *td, struct linux_sgetmask_args *args) bsd_to_linux_sigset(&td->td_sigmask, &mask); PROC_UNLOCK(p); td->td_retval[0] = mask.__mask; +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + linux_ktrsigset(&mask, sizeof(mask)); +#endif return (0); } @@ -372,6 +404,10 @@ linux_ssetmask(struct thread *td, struct linux_ssetmask_args *args) LINUX_SIGEMPTYSET(lset); lset.__mask = args->mask; linux_to_bsd_sigset(&lset, &bset); +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + linux_ktrsigset(&lset, sizeof(lset)); +#endif td->td_sigmask = bset; SIG_CANTMASK(td->td_sigmask); signotify(td); @@ -393,6 +429,10 @@ linux_sigpending(struct thread *td, struct linux_sigpending_args *args) SIGSETAND(bset, td->td_sigmask); PROC_UNLOCK(p); bsd_to_linux_sigset(&bset, &lset); +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + linux_ktrsigset(&lset, sizeof(lset)); +#endif mask = lset.__mask; return (copyout(&mask, args->mask, sizeof(mask))); } @@ -418,6 +458,10 @@ linux_rt_sigpending(struct thread *td, struct linux_rt_sigpending_args *args) SIGSETAND(bset, td->td_sigmask); PROC_UNLOCK(p); bsd_to_linux_sigset(&bset, &lset); +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + linux_ktrsigset(&lset, sizeof(lset)); +#endif return (copyout(&lset, args->set, args->sigsetsize)); } @@ -449,7 +493,7 @@ linux_common_rt_sigtimedwait(struct thread *td, l_sigset_t *mask, l_siginfo_t lsi; ksiginfo_t ksi; - error = linux_copyin_sigset(mask, sigsetsize, &bset, NULL); + error = linux_copyin_sigset(td, mask, sigsetsize, &bset, NULL); if (error != 0) return (error); @@ -825,7 +869,7 @@ linux_rt_sigsuspend(struct thread *td, struct linux_rt_sigsuspend_args *uap) sigset_t sigmask; int error; - error = linux_copyin_sigset(uap->newset, uap->sigsetsize, + error = linux_copyin_sigset(td, uap->newset, uap->sigsetsize, &sigmask, NULL); if (error != 0) return (error); @@ -915,8 +959,8 @@ linux_psignal(struct thread *td, int pid, int sig) } int -linux_copyin_sigset(l_sigset_t *lset, l_size_t sigsetsize, sigset_t *set, - sigset_t **pset) +linux_copyin_sigset(struct thread *td, l_sigset_t *lset, + l_size_t sigsetsize, sigset_t *set, sigset_t **pset) { l_sigset_t lmask; int error; @@ -930,6 +974,10 @@ linux_copyin_sigset(l_sigset_t *lset, l_size_t sigsetsize, sigset_t *set, linux_to_bsd_sigset(&lmask, set); if (pset != NULL) *pset = set; +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + linux_ktrsigset(&lmask, sizeof(lmask)); +#endif } else if (pset != NULL) *pset = NULL; return (0); diff --git a/sys/compat/linux/linux_signal.h b/sys/compat/linux/linux_signal.h index 75fe0b24e592..aa385728efa6 100644 --- a/sys/compat/linux/linux_signal.h +++ b/sys/compat/linux/linux_signal.h @@ -35,6 +35,7 @@ int linux_do_sigaction(struct thread *, int, l_sigaction_t *, l_sigaction_t *); void siginfo_to_lsiginfo(const siginfo_t *si, l_siginfo_t *lsi, l_int sig); int lsiginfo_to_siginfo(struct thread *td, const l_siginfo_t *lsi, siginfo_t *si, int sig); -int linux_copyin_sigset(l_sigset_t *, l_size_t, sigset_t *, sigset_t **); +int linux_copyin_sigset(struct thread *td, l_sigset_t *, l_size_t, sigset_t *, + sigset_t **); #endif /* _LINUX_SIGNAL_H_ */