/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 1991, 1992 Linus Torvalds * Copyright (C) 1994 - 2000, 2006 Ralf Baechle * Copyright (C) 1999, 2000 Silicon Graphics, Inc. * Copyright (C) 2016, Imagination Technologies Ltd.
*/ #include <linux/compiler.h> #include <linux/errno.h> #include <linux/signal.h> #include <linux/sched/signal.h> #include <linux/uaccess.h>
regs = current_pt_regs();
frame = (struct rt_sigframe32 __user *)regs->regs[29]; if (!access_ok(frame, sizeof(*frame))) goto badframe; if (__copy_conv_sigset_from_user(&set, &frame->rs_uc.uc_sigmask)) goto badframe;
set_current_blocked(&set);
sig = restore_sigcontext32(regs, &frame->rs_uc.uc_mcontext); if (sig < 0) goto badframe; elseif (sig)
force_sig(sig);
if (compat_restore_altstack(&frame->rs_uc.uc_stack)) goto badframe;
/* * Don't let your children do this ...
*/
__asm__ __volatile__( "move\t$29, %0\n\t" "j\tsyscall_exit"
: /* no outputs */
: "r" (regs)); /* Unreached */
regs = current_pt_regs();
frame = (struct sigframe32 __user *)regs->regs[29]; if (!access_ok(frame, sizeof(*frame))) goto badframe; if (__copy_conv_sigset_from_user(&blocked, &frame->sf_mask)) goto badframe;
set_current_blocked(&blocked);
sig = restore_sigcontext32(regs, &frame->sf_sc); if (sig < 0) goto badframe; elseif (sig)
force_sig(sig);
/* * Don't let your children do this ...
*/
__asm__ __volatile__( "move\t$29, %0\n\t" "j\tsyscall_exit"
: /* no outputs */
: "r" (regs)); /* Unreached */
badframe:
force_sig(SIGSEGV);
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.25 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.