From owner-p4-projects@FreeBSD.ORG Sun Jul 10 04:39:33 2005 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7170616A421; Sun, 10 Jul 2005 04:39:32 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4739516A41F for ; Sun, 10 Jul 2005 04:39:32 +0000 (GMT) (envelope-from csjp@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id F095D43D46 for ; Sun, 10 Jul 2005 04:39:31 +0000 (GMT) (envelope-from csjp@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j6A4dVi0021249 for ; Sun, 10 Jul 2005 04:39:31 GMT (envelope-from csjp@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j6A4dVTM021246 for perforce@freebsd.org; Sun, 10 Jul 2005 04:39:31 GMT (envelope-from csjp@freebsd.org) Date: Sun, 10 Jul 2005 04:39:31 GMT Message-Id: <200507100439.j6A4dVTM021246@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to csjp@freebsd.org using -f From: "Christian S.J. Peron" To: Perforce Change Reviews Cc: Subject: PERFORCE change 79890 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Jul 2005 04:39:33 -0000 http://perforce.freebsd.org/chv.cgi?CH=79890 Change 79890 by csjp@csjp_xor on 2005/07/10 04:38:31 Activate mac_syscall_enter and mac_syscall_exit for all other supported architectures. It should be noted that syscall value (or code) is greater than p->p_sysent->sv_size, we change code to zero. This might have an impact on kernel tracing mechanisms, however at least we will be tracing the accurate syscall now. (nosys). Anyone who could test these to make sure everything builds alright, that would be great! I do not have access to half this hardware. Affected files ... .. //depot/projects/trustedbsd/mac/sys/alpha/alpha/trap.c#26 edit .. //depot/projects/trustedbsd/mac/sys/amd64/amd64/trap.c#16 edit .. //depot/projects/trustedbsd/mac/sys/arm/arm/trap.c#6 edit .. //depot/projects/trustedbsd/mac/sys/ia64/ia32/ia32_trap.c#4 edit .. //depot/projects/trustedbsd/mac/sys/ia64/ia64/trap.c#29 edit .. //depot/projects/trustedbsd/mac/sys/powerpc/powerpc/trap.c#19 edit .. //depot/projects/trustedbsd/mac/sys/sparc64/sparc64/trap.c#29 edit Differences ... ==== //depot/projects/trustedbsd/mac/sys/alpha/alpha/trap.c#26 (text+ko) ==== @@ -32,6 +32,7 @@ /* #include "opt_fix_unaligned_vax_fp.h" */ #include "opt_ddb.h" #include "opt_ktrace.h" +#include "opt_mac.h" #include #include @@ -42,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -687,10 +689,9 @@ if (p->p_sysent->sv_mask) code &= p->p_sysent->sv_mask; - if (code >= p->p_sysent->sv_size) - callp = &p->p_sysent->sv_table[0]; - else - callp = &p->p_sysent->sv_table[code]; + if (code >= p->p_sysent->sv_size) + code = 0; + callp = &p->p_sysent->sv_table[code]; nargs = (callp->sy_narg & SYF_ARGMASK) + hidden; switch (nargs) { @@ -734,7 +735,14 @@ PTRACESTOP_SC(p, td, S_PT_SCE); +#ifdef MAC + error = mac_syscall_enter(td, args + hidden, code); + if (error == 0) + error = (*callp->sy_call)(td, args + hidden); + mac_syscall_exit(td, args + hidden, code, error); +#else error = (*callp->sy_call)(td, args + hidden); +#endif } ==== //depot/projects/trustedbsd/mac/sys/amd64/amd64/trap.c#16 (text+ko) ==== @@ -48,6 +48,7 @@ #include "opt_cpu.h" #include "opt_isa.h" #include "opt_ktrace.h" +#include "opt_mac.h" #include #include @@ -59,6 +60,7 @@ #include #include #include +#include #include #include #include @@ -740,10 +742,9 @@ if (p->p_sysent->sv_mask) code &= p->p_sysent->sv_mask; - if (code >= p->p_sysent->sv_size) - callp = &p->p_sysent->sv_table[0]; - else - callp = &p->p_sysent->sv_table[code]; + if (code >= p->p_sysent->sv_size) + code = 0; + callp = &p->p_sysent->sv_table[code]; narg = callp->sy_narg & SYF_ARGMASK; @@ -779,12 +780,18 @@ PTRACESTOP_SC(p, td, S_PT_SCE); - if ((callp->sy_narg & SYF_MPSAFE) == 0) { + if ((callp->sy_narg & SYF_MPSAFE) == 0) mtx_lock(&Giant); +#ifdef MAC + error = mac_syscall_enter(td, argp, code); + if (error == 0) error = (*callp->sy_call)(td, argp); + mac_syscall_exit(td, argp, code, error); +#else + error = (*callp->sy_call)(td, argp); +#endif + if ((callp->sy_narg & SYF_MPSAFE) == 0) mtx_unlock(&Giant); - } else - error = (*callp->sy_call)(td, argp); } switch (error) { ==== //depot/projects/trustedbsd/mac/sys/arm/arm/trap.c#6 (text+ko) ==== @@ -80,6 +80,7 @@ #include "opt_ktrace.h" +#include "opt_mac.h" #include __FBSDID("$FreeBSD: src/sys/arm/arm/trap.c,v 1.15 2005/05/25 13:46:32 cognet Exp $"); @@ -91,6 +92,7 @@ #include #include #include +#include #include #include #include @@ -894,9 +896,8 @@ if (p->p_sysent->sv_mask) code &= p->p_sysent->sv_mask; if (code >= p->p_sysent->sv_size) - callp = &p->p_sysent->sv_table[0]; - else - callp = &p->p_sysent->sv_table[code]; + code = 0; + callp = &p->p_sysent->sv_table[code]; nargs = callp->sy_narg & SYF_ARGMASK; memcpy(copyargs, ap, nap * sizeof(register_t)); if (nargs > nap) { @@ -922,7 +923,14 @@ td->td_retval[1] = 0; STOPEVENT(p, S_SCE, (callp->sy_narg & SYF_ARGMASK)); PTRACESTOP_SC(p, td, S_PT_SCE); +#ifdef MAC + error = mac_syscall_enter(td, args, code); + if (error == 0) + error = (*callp->sy_call)(td, args); + mac_syscall_exit(td, args, code, error); +#else error = (*callp->sy_call)(td, args); +#endif } switch (error) { case 0: ==== //depot/projects/trustedbsd/mac/sys/ia64/ia32/ia32_trap.c#4 (text+ko) ==== @@ -27,12 +27,15 @@ #include __FBSDID("$FreeBSD: src/sys/ia64/ia32/ia32_trap.c,v 1.5 2005/04/12 23:18:54 jhb Exp $"); +#include "opt_mac.h" + #include #include #include #include #include #include +#include #include #include #include @@ -92,9 +95,8 @@ code &= p->p_sysent->sv_mask; if (code >= p->p_sysent->sv_size) - callp = &p->p_sysent->sv_table[0]; - else - callp = &p->p_sysent->sv_table[code]; + code = 0; + callp = &p->p_sysent->sv_table[code]; narg = callp->sy_narg & SYF_ARGMASK; @@ -124,7 +126,14 @@ STOPEVENT(p, S_SCE, narg); +#ifdef MAC + eror = mac_syscall_enter(td, args64, code); + if (error == 0) + error = (*callp->sy_call)(td, args64); + mac_syscall_exit(td, args64, code, error); +#else error = (*callp->sy_call)(td, args64); +#endif } switch (error) { ==== //depot/projects/trustedbsd/mac/sys/ia64/ia64/trap.c#29 (text+ko) ==== @@ -33,6 +33,7 @@ #include "opt_ddb.h" #include "opt_ktrace.h" +#include "opt_mac.h" #include #include @@ -43,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -928,10 +930,9 @@ if (p->p_sysent->sv_mask) code &= p->p_sysent->sv_mask; - if (code >= p->p_sysent->sv_size) - callp = &p->p_sysent->sv_table[0]; - else - callp = &p->p_sysent->sv_table[code]; + if (code >= p->p_sysent->sv_size) + code = 0; + callp = &p->p_sysent->sv_table[code] #ifdef KTRACE if (KTRPOINT(td, KTR_SYSCALL)) @@ -949,12 +950,18 @@ /* * Grab Giant if the syscall is not flagged as MP safe. */ - if ((callp->sy_narg & SYF_MPSAFE) == 0) { + if ((callp->sy_narg & SYF_MPSAFE) == 0) mtx_lock(&Giant); +#ifdef MAC + error = mac_syscall_enter(td, args, code); + if (error == 0) error = (*callp->sy_call)(td, args); + mac_syscall_exit(td, args, code, error); +#else + error = (*callp->sy_call)(td, args); +#endif + if ((callp->sy_narg & SYF_MPSAFE) == 0) mtx_unlock(&Giant); - } else - error = (*callp->sy_call)(td, args); if (error != EJUSTRETURN) { /* ==== //depot/projects/trustedbsd/mac/sys/powerpc/powerpc/trap.c#19 (text+ko) ==== @@ -35,12 +35,14 @@ __FBSDID("$FreeBSD: src/sys/powerpc/powerpc/trap.c,v 1.54 2005/04/20 20:52:46 ps Exp $"); #include "opt_ktrace.h" +#include "opt_mac.h" #include #include #include #include #include +#include #include #include #include @@ -373,10 +375,9 @@ if (p->p_sysent->sv_mask) code &= p->p_sysent->sv_mask; - if (code >= p->p_sysent->sv_size) - callp = &p->p_sysent->sv_table[0]; - else - callp = &p->p_sysent->sv_table[code]; + if (code >= p->p_sysent->sv_size) + code = 0; + callp = &p->p_sysent->sv_table[code]; narg = callp->sy_narg & SYF_ARGMASK; @@ -410,7 +411,14 @@ STOPEVENT(p, S_SCE, narg); +#ifdef MAC + error = mac_syscall_enter(td, params, code); + if (error == 0) + error = (*callp->sy_call)(td, params); + mac_syscall_exit(td, params, code, error); +#else error = (*callp->sy_call)(td, params); +#endif CTR3(KTR_SYSC, "syscall: p=%s %s ret=%x", p->p_comm, syscallnames[code], td->td_retval[0]); ==== //depot/projects/trustedbsd/mac/sys/sparc64/sparc64/trap.c#29 (text+ko) ==== @@ -43,6 +43,7 @@ #include "opt_ddb.h" #include "opt_ktr.h" #include "opt_ktrace.h" +#include "opt_mac.h" #include #include @@ -51,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -547,10 +549,9 @@ if (p->p_sysent->sv_mask) code &= p->p_sysent->sv_mask; - if (code >= p->p_sysent->sv_size) - callp = &p->p_sysent->sv_table[0]; - else - callp = &p->p_sysent->sv_table[code]; + if (code >= p->p_sysent->sv_size) + code = 0; + callp = &p->p_sysent->sv_table[code]; narg = callp->sy_narg & SYF_ARGMASK; @@ -589,7 +590,14 @@ PTRACESTOP_SC(p, td, S_PT_SCE); +#ifdef MAC + error = mac_syscall_enter(td, argp, code); + if (error == 0) + error = (*callp->sy_call)(td, argp); + mac_syscall_exit(td, argp, code, error); +#else error = (*callp->sy_call)(td, argp); +#endif CTR5(KTR_SYSC, "syscall: p=%p error=%d %s return %#lx %#lx ", p, error, syscallnames[code], td->td_retval[0],