这篇教程C++ valid_user_regs函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中valid_user_regs函数的典型用法代码示例。如果您正苦于以下问题:C++ valid_user_regs函数的具体用法?C++ valid_user_regs怎么用?C++ valid_user_regs使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了valid_user_regs函数的24个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: handle_signal/* * OK, we're invoking a handler */ static voidhandle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, struct pt_regs *regs){ struct thread_info *thread = current_thread_info(); struct task_struct *tsk = current; sigset_t *oldset = sigmask_to_save(); int usig = sig; int ret; /* * translate the signal */ if (usig < 32 && thread->exec_domain && thread->exec_domain->signal_invmap) usig = thread->exec_domain->signal_invmap[usig]; /* * Set up the stack frame */ if (ka->sa.sa_flags & SA_SIGINFO) ret = setup_rt_frame(usig, ka, info, oldset, regs); else ret = setup_frame(usig, ka, oldset, regs); /* * Check that the resulting registers are actually sane. */ ret |= !valid_user_regs(regs); if (ret != 0) { force_sigsegv(sig, tsk); return; } signal_delivered(sig, info, ka, regs, 0);}
开发者ID:ParkHiMin,项目名称:linux,代码行数:38,
示例2: restore_sigcontextstatic intrestore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc){ int err = 0; __get_user_error(regs->ARM_r0, &sc->arm_r0, err); __get_user_error(regs->ARM_r1, &sc->arm_r1, err); __get_user_error(regs->ARM_r2, &sc->arm_r2, err); __get_user_error(regs->ARM_r3, &sc->arm_r3, err); __get_user_error(regs->ARM_r4, &sc->arm_r4, err); __get_user_error(regs->ARM_r5, &sc->arm_r5, err); __get_user_error(regs->ARM_r6, &sc->arm_r6, err); __get_user_error(regs->ARM_r7, &sc->arm_r7, err); __get_user_error(regs->ARM_r8, &sc->arm_r8, err); __get_user_error(regs->ARM_r9, &sc->arm_r9, err); __get_user_error(regs->ARM_r10, &sc->arm_r10, err); __get_user_error(regs->ARM_fp, &sc->arm_fp, err); __get_user_error(regs->ARM_ip, &sc->arm_ip, err); __get_user_error(regs->ARM_sp, &sc->arm_sp, err); __get_user_error(regs->ARM_lr, &sc->arm_lr, err); __get_user_error(regs->ARM_pc, &sc->arm_pc, err); __get_user_error(regs->ARM_cpsr, &sc->arm_cpsr, err); err |= !valid_user_regs(regs); return err;}
开发者ID:iPodLinux,项目名称:linux-2.6.7-ipod,代码行数:27,
示例3: restore_sigframestatic int restore_sigframe(struct pt_regs *regs, struct rt_sigframe __user *sf){ sigset_t set; int i, err; struct aux_context __user *aux = (struct aux_context __user *)sf->uc.uc_mcontext.__reserved; err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set)); if (err == 0) set_current_blocked(&set); for (i = 0; i < 31; i++) __get_user_error(regs->regs[i], &sf->uc.uc_mcontext.regs[i], err); __get_user_error(regs->sp, &sf->uc.uc_mcontext.sp, err); __get_user_error(regs->pc, &sf->uc.uc_mcontext.pc, err); __get_user_error(regs->pstate, &sf->uc.uc_mcontext.pstate, err); /* * Avoid sys_rt_sigreturn() restarting. */ regs->syscallno = ~0UL; err |= !valid_user_regs(®s->user_regs); if (err == 0) err |= restore_fpsimd_context(&aux->fpsimd); return err;}
开发者ID:garyvan,项目名称:openwrt-1.6,代码行数:31,
示例4: handle_signalstatic inline voidhandle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *oldset, struct pt_regs *regs, int syscall){ int ret; /* * Set up the stack frame */ ret = setup_rt_frame(sig, ka, info, oldset, regs); /* * Check that the resulting registers are sane */ ret |= !valid_user_regs(regs); /* * Block the signal if we were unsuccessful. */ if (ret != 0 || !(ka->sa.sa_flags & SA_NODEFER)) { spin_lock_irq(¤t->sighand->siglock); sigorsets(¤t->blocked, ¤t->blocked, &ka->sa.sa_mask); sigaddset(¤t->blocked, sig); recalc_sigpending(); spin_unlock_irq(¤t->sighand->siglock); } if (ret == 0) return; force_sigsegv(sig, current);}
开发者ID:Minia89,项目名称:DORIMANX_LG_STOCK_LP_KERNEL,代码行数:33,
示例5: compat_gpr_setstatic int compat_gpr_set(struct task_struct *target, const struct user_regset *regset, unsigned int pos, unsigned int count, const void *kbuf, const void __user *ubuf){ struct pt_regs newregs; int ret = 0; unsigned int i, start, num_regs; /* Calculate the number of AArch32 registers contained in count */ num_regs = count / regset->size; /* Convert pos into an register number */ start = pos / regset->size; if (start + num_regs > regset->n) return -EIO; newregs = *task_pt_regs(target); for (i = 0; i < num_regs; ++i) { unsigned int idx = start + i; compat_ulong_t reg; if (kbuf) { memcpy(®, kbuf, sizeof(reg)); kbuf += sizeof(reg); } else { ret = copy_from_user(®, ubuf, sizeof(reg)); if (ret) { ret = -EFAULT; break; } ubuf += sizeof(reg); } switch (idx) { case 15: newregs.pc = reg; break; case 16: newregs.pstate = reg; break; case 17: newregs.orig_x0 = reg; break; default: newregs.regs[idx] = reg; } } if (valid_user_regs(&newregs.user_regs)) *task_pt_regs(target) = newregs; else ret = -EINVAL; return ret;}
开发者ID:twicejr,项目名称:HUAWEI-P9-Lite_OpenSource,代码行数:60,
示例6: restore_sigcontextstatic intrestore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc){ int err = 0;#define COPY(x) err |= __get_user(regs->x, &sc->x) COPY(sr); COPY(pc); COPY(lr); COPY(sp); COPY(r12); COPY(r11); COPY(r10); COPY(r9); COPY(r8); COPY(r7); COPY(r6); COPY(r5); COPY(r4); COPY(r3); COPY(r2); COPY(r1); COPY(r0);#undef COPY /* * Don't allow anyone to pretend they're running in supervisor * mode or something... */ err |= !valid_user_regs(regs); return err;}
开发者ID:Minia89,项目名称:DORIMANX_LG_STOCK_LP_KERNEL,代码行数:33,
示例7: handle_signal/* * OK, we're invoking a handler */ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs){ sigset_t *oldset = sigmask_to_save(); int ret; /* * Increment event counter and perform fixup for the pre-signal * frame. */ rseq_signal_deliver(ksig, regs); /* * Set up the stack frame */ if (ksig->ka.sa.sa_flags & SA_SIGINFO) ret = setup_rt_frame(ksig, oldset, regs); else ret = setup_frame(ksig, oldset, regs); /* * Check that the resulting registers are actually sane. */ ret |= !valid_user_regs(regs); signal_setup_done(ret, ksig, 0);}
开发者ID:JJungs-lee,项目名称:linux,代码行数:29,
示例8: handle_signal/* * OK, we're invoking a handler */static void handle_signal(struct ksignal *ksig, struct pt_regs *regs){ struct task_struct *tsk = current; sigset_t *oldset = sigmask_to_save(); int usig = ksig->sig; int ret; /* * Set up the stack frame */ if (is_compat_task()) { if (ksig->ka.sa.sa_flags & SA_SIGINFO) ret = compat_setup_rt_frame(usig, ksig, oldset, regs); else ret = compat_setup_frame(usig, ksig, oldset, regs); } else { ret = setup_rt_frame(usig, ksig, oldset, regs); } /* * Check that the resulting registers are actually sane. */ ret |= !valid_user_regs(®s->user_regs, current); /* * Fast forward the stepping logic so we step into the signal * handler. */ if (!ret) user_fastforward_single_step(tsk); signal_setup_done(ret, ksig, 0);}
开发者ID:Artox,项目名称:linux,代码行数:36,
示例9: handle_signalstatic inthandle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *oldset, struct pt_regs * regs, int syscall){ struct thread_info *thread = current_thread_info(); struct task_struct *tsk = current; int usig = sig; int ret; if (syscall) { switch (regs->ARM_r0) { case -ERESTART_RESTARTBLOCK: case -ERESTARTNOHAND: regs->ARM_r0 = -EINTR; break; case -ERESTARTSYS: if (!(ka->sa.sa_flags & SA_RESTART)) { regs->ARM_r0 = -EINTR; break; } case -ERESTARTNOINTR: setup_syscall_restart(regs); } } if (usig < 32 && thread->exec_domain && thread->exec_domain->signal_invmap) usig = thread->exec_domain->signal_invmap[usig]; if (ka->sa.sa_flags & SA_SIGINFO) ret = setup_rt_frame(usig, ka, info, oldset, regs); else ret = setup_frame(usig, ka, oldset, regs); ret |= !valid_user_regs(regs); if (ret != 0) { force_sigsegv(sig, tsk); return ret; } spin_lock_irq(&tsk->sighand->siglock); sigorsets(&tsk->blocked, &tsk->blocked, &ka->sa.sa_mask); if (!(ka->sa.sa_flags & SA_NODEFER)) sigaddset(&tsk->blocked, sig); recalc_sigpending(); spin_unlock_irq(&tsk->sighand->siglock); return 0;}
开发者ID:leemgs,项目名称:OptimusOneKernel-KandroidCommunity,代码行数:57,
示例10: handle_signal/* * OK, we're invoking a handler */static void handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, struct pt_regs *regs, int syscall){ struct thread_info *thread = current_thread_info(); struct task_struct *tsk = current; sigset_t *oldset = sigmask_to_save(); int usig = sig; int ret; /* * If we were from a system call, check for system call restarting... */ if (syscall) { switch (regs->UCreg_00) { case -ERESTART_RESTARTBLOCK: case -ERESTARTNOHAND: regs->UCreg_00 = -EINTR; break; case -ERESTARTSYS: if (!(ka->sa.sa_flags & SA_RESTART)) { regs->UCreg_00 = -EINTR; break; } /* fallthrough */ case -ERESTARTNOINTR: setup_syscall_restart(regs); } } /* * translate the signal */ if (usig < 32 && thread->exec_domain && thread->exec_domain->signal_invmap) usig = thread->exec_domain->signal_invmap[usig]; /* * Set up the stack frame */ if (ka->sa.sa_flags & SA_SIGINFO) ret = setup_rt_frame(usig, ka, info, oldset, regs); else ret = setup_frame(usig, ka, oldset, regs); /* * Check that the resulting registers are actually sane. */ ret |= !valid_user_regs(regs); if (ret != 0) { force_sigsegv(sig, tsk); return; } signal_delivered(sig, info, ka, regs, 0);}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:59,
示例11: setup_rt_framestatic void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *set, struct pt_regs *regs){ struct rt_sigframe *frame; unsigned long retcode; int err = 0; frame = get_sigframe(ka, regs, sizeof(struct rt_sigframe)); if (!access_ok(VERIFY_WRITE, frame, sizeof (*frame))) goto segv_and_exit; err |= __put_user(&frame->info, &frame->pinfo); err |= __put_user(&frame->uc, &frame->puc); err |= copy_siginfo_to_user(&frame->info, info); /* Clear all the bits of the ucontext we don't use. */ err |= __clear_user(&frame->uc, offsetof(struct ucontext, uc_mcontext)); err |= setup_sigcontext(&frame->uc.uc_mcontext, /*&frame->fpstate,*/ regs, set->sig[0]); err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); /* Set up to return from userspace. If provided, use a stub already in userspace. */ if (ka->sa.sa_flags & SA_RESTORER) { retcode = (unsigned long)ka->sa.sa_restorer; } else { retcode = (unsigned long)&frame->retcode; err |= __put_user(SWI_SYS_RT_SIGRETURN, &frame->retcode); flush_icache_range(retcode, retcode + 4); } if (err) goto segv_and_exit; if (current->exec_domain && current->exec_domain->signal_invmap && sig < 32) regs->ARM_r0 = current->exec_domain->signal_invmap[sig]; else regs->ARM_r0 = sig; regs->ARM_sp = (unsigned long)frame; regs->ARM_lr = retcode; regs->ARM_pc = (unsigned long)ka->sa.sa_handler;#if defined(CONFIG_CPU_32) /* Maybe we need to deliver a 32-bit signal to a 26-bit task. */ if (ka->sa.sa_flags & SA_THIRTYTWO) regs->ARM_cpsr = USR_MODE;#endif if (valid_user_regs(regs)) return;segv_and_exit: if (sig == SIGSEGV) ka->sa.sa_handler = SIG_DFL; force_sig(SIGSEGV, current);}
开发者ID:dmgerman,项目名称:linux-pre-history,代码行数:56,
示例12: compat_gpr_setstatic int compat_gpr_set(struct task_struct *target, const struct user_regset *regset, unsigned int pos, unsigned int count, const void *kbuf, const void __user *ubuf){ struct pt_regs newregs; int ret = 0; unsigned int i, start, num_regs; /* Calculate the number of AArch32 registers contained in count */ num_regs = count / regset->size; /* Convert pos into an register number */ start = pos / regset->size; if (start + num_regs > regset->n) return -EIO; newregs = *task_pt_regs(target); for (i = 0; i < num_regs; ++i) { unsigned int idx = start + i; void *reg; switch (idx) { case 15: reg = (void *)&newregs.pc; break; case 16: reg = (void *)&newregs.pstate; break; case 17: reg = (void *)&newregs.orig_x0; break; default: reg = (void *)&newregs.regs[idx]; } ret = copy_from_user(reg, ubuf, sizeof(compat_ulong_t)); if (ret) goto out; else ubuf += sizeof(compat_ulong_t); } if (valid_user_regs(&newregs.user_regs)) *task_pt_regs(target) = newregs; else ret = -EINVAL;out: return ret;}
开发者ID:03199618,项目名称:linux,代码行数:54,
示例13: restore_sigframestatic int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf){ struct aux_sigframe __user *aux; sigset_t set; int err; err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set)); if (err == 0) { sigdelsetmask(&set, ~_BLOCKABLE); spin_lock_irq(¤t->sighand->siglock); current->blocked = set; recalc_sigpending(); spin_unlock_irq(¤t->sighand->siglock); } __get_user_error(regs->ARM_r0, &sf->uc.uc_mcontext.arm_r0, err); __get_user_error(regs->ARM_r1, &sf->uc.uc_mcontext.arm_r1, err); __get_user_error(regs->ARM_r2, &sf->uc.uc_mcontext.arm_r2, err); __get_user_error(regs->ARM_r3, &sf->uc.uc_mcontext.arm_r3, err); __get_user_error(regs->ARM_r4, &sf->uc.uc_mcontext.arm_r4, err); __get_user_error(regs->ARM_r5, &sf->uc.uc_mcontext.arm_r5, err); __get_user_error(regs->ARM_r6, &sf->uc.uc_mcontext.arm_r6, err); __get_user_error(regs->ARM_r7, &sf->uc.uc_mcontext.arm_r7, err); __get_user_error(regs->ARM_r8, &sf->uc.uc_mcontext.arm_r8, err); __get_user_error(regs->ARM_r9, &sf->uc.uc_mcontext.arm_r9, err); __get_user_error(regs->ARM_r10, &sf->uc.uc_mcontext.arm_r10, err); __get_user_error(regs->ARM_fp, &sf->uc.uc_mcontext.arm_fp, err); __get_user_error(regs->ARM_ip, &sf->uc.uc_mcontext.arm_ip, err); __get_user_error(regs->ARM_sp, &sf->uc.uc_mcontext.arm_sp, err); __get_user_error(regs->ARM_lr, &sf->uc.uc_mcontext.arm_lr, err); __get_user_error(regs->ARM_pc, &sf->uc.uc_mcontext.arm_pc, err); __get_user_error(regs->ARM_ORIG_r0, &sf->uc.uc_mcontext.arm_old_r0, err); __get_user_error(regs->ARM_cpsr, &sf->uc.uc_mcontext.arm_cpsr, err); err |= !valid_user_regs(regs); aux = (struct aux_sigframe __user *) sf->uc.uc_regspace;#ifdef CONFIG_CRUNCH if (err == 0) err |= restore_crunch_context(&aux->crunch);#endif#ifdef CONFIG_IWMMXT if (err == 0 && test_thread_flag(TIF_USING_IWMMXT)) err |= restore_iwmmxt_context(&aux->iwmmxt);#endif#ifdef CONFIG_VFP if (err == 0) err |= restore_vfp_context(&aux->vfp);#endif return err;}
开发者ID:EmcraftSystems,项目名称:linux-emcraft,代码行数:52,
示例14: restore_sigframestatic int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf){ sigset_t set; int err; err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set)); if (err == 0) { sigdelsetmask(&set, ~_BLOCKABLE); set_current_blocked(&set); } err |= __get_user(regs->UCreg_00, &sf->uc.uc_mcontext.regs.UCreg_00); err |= __get_user(regs->UCreg_01, &sf->uc.uc_mcontext.regs.UCreg_01); err |= __get_user(regs->UCreg_02, &sf->uc.uc_mcontext.regs.UCreg_02); err |= __get_user(regs->UCreg_03, &sf->uc.uc_mcontext.regs.UCreg_03); err |= __get_user(regs->UCreg_04, &sf->uc.uc_mcontext.regs.UCreg_04); err |= __get_user(regs->UCreg_05, &sf->uc.uc_mcontext.regs.UCreg_05); err |= __get_user(regs->UCreg_06, &sf->uc.uc_mcontext.regs.UCreg_06); err |= __get_user(regs->UCreg_07, &sf->uc.uc_mcontext.regs.UCreg_07); err |= __get_user(regs->UCreg_08, &sf->uc.uc_mcontext.regs.UCreg_08); err |= __get_user(regs->UCreg_09, &sf->uc.uc_mcontext.regs.UCreg_09); err |= __get_user(regs->UCreg_10, &sf->uc.uc_mcontext.regs.UCreg_10); err |= __get_user(regs->UCreg_11, &sf->uc.uc_mcontext.regs.UCreg_11); err |= __get_user(regs->UCreg_12, &sf->uc.uc_mcontext.regs.UCreg_12); err |= __get_user(regs->UCreg_13, &sf->uc.uc_mcontext.regs.UCreg_13); err |= __get_user(regs->UCreg_14, &sf->uc.uc_mcontext.regs.UCreg_14); err |= __get_user(regs->UCreg_15, &sf->uc.uc_mcontext.regs.UCreg_15); err |= __get_user(regs->UCreg_16, &sf->uc.uc_mcontext.regs.UCreg_16); err |= __get_user(regs->UCreg_17, &sf->uc.uc_mcontext.regs.UCreg_17); err |= __get_user(regs->UCreg_18, &sf->uc.uc_mcontext.regs.UCreg_18); err |= __get_user(regs->UCreg_19, &sf->uc.uc_mcontext.regs.UCreg_19); err |= __get_user(regs->UCreg_20, &sf->uc.uc_mcontext.regs.UCreg_20); err |= __get_user(regs->UCreg_21, &sf->uc.uc_mcontext.regs.UCreg_21); err |= __get_user(regs->UCreg_22, &sf->uc.uc_mcontext.regs.UCreg_22); err |= __get_user(regs->UCreg_23, &sf->uc.uc_mcontext.regs.UCreg_23); err |= __get_user(regs->UCreg_24, &sf->uc.uc_mcontext.regs.UCreg_24); err |= __get_user(regs->UCreg_25, &sf->uc.uc_mcontext.regs.UCreg_25); err |= __get_user(regs->UCreg_26, &sf->uc.uc_mcontext.regs.UCreg_26); err |= __get_user(regs->UCreg_fp, &sf->uc.uc_mcontext.regs.UCreg_fp); err |= __get_user(regs->UCreg_ip, &sf->uc.uc_mcontext.regs.UCreg_ip); err |= __get_user(regs->UCreg_sp, &sf->uc.uc_mcontext.regs.UCreg_sp); err |= __get_user(regs->UCreg_lr, &sf->uc.uc_mcontext.regs.UCreg_lr); err |= __get_user(regs->UCreg_pc, &sf->uc.uc_mcontext.regs.UCreg_pc); err |= __get_user(regs->UCreg_asr, &sf->uc.uc_mcontext.regs.UCreg_asr); err |= !valid_user_regs(regs); return err;}
开发者ID:hyphenlee,项目名称:linux,代码行数:49,
示例15: put_user_reg/* * this routine will put a word on the processes privileged stack. * the offset is how far from the base addr as stored in the THREAD. * this routine assumes that all the privileged stacks are in our * data space. */static inline intput_user_reg(struct task_struct *task, int offset, long data){ struct pt_regs newregs, *regs = task_pt_regs(task); int ret = -EINVAL; newregs = *regs; newregs.uregs[offset] = data; if (valid_user_regs(&newregs)) { regs->uregs[offset] = data; ret = 0; } return ret;}
开发者ID:PurpleAlien,项目名称:linux-linaro-natty,代码行数:22,
示例16: handle_signal/* * OK, we're invoking a handler */ static inthandle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *oldset, struct pt_regs * regs){ struct thread_info *thread = current_thread_info(); struct task_struct *tsk = current; int usig = sig; int ret; /* * translate the signal */ if (usig < 32 && thread->exec_domain && thread->exec_domain->signal_invmap) usig = thread->exec_domain->signal_invmap[usig]; /* * Set up the stack frame */ if (ka->sa.sa_flags & SA_SIGINFO) ret = setup_rt_frame(usig, ka, info, oldset, regs); else ret = setup_frame(usig, ka, oldset, regs); /* * Check that the resulting registers are actually sane. */ ret |= !valid_user_regs(regs); if (ret != 0) { force_sigsegv(sig, tsk); return ret; } /* * Block the signal if we were successful. */ spin_lock_irq(&tsk->sighand->siglock); sigorsets(&tsk->blocked, &tsk->blocked, &ka->sa.sa_mask); if (!(ka->sa.sa_flags & SA_NODEFER)) sigaddset(&tsk->blocked, sig); recalc_sigpending(); spin_unlock_irq(&tsk->sighand->siglock); return 0;}
开发者ID:dh-electronics,项目名称:linux-am35x,代码行数:50,
示例17: gpr_setstatic int gpr_set(struct task_struct *target, const struct user_regset *regset, unsigned int pos, unsigned int count, const void *kbuf, const void __user *ubuf){ int ret; struct user_pt_regs newregs; ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &newregs, 0, -1); if (ret) return ret; if (!valid_user_regs(&newregs)) return -EINVAL; task_pt_regs(target)->user_regs = newregs; return 0;}
开发者ID:BlissRoms-Kernels,项目名称:kernel_motorola_BlissPure,代码行数:17,
示例18: handle_signal/* * OK, we're invoking a handler */ static voidhandle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *oldset, struct pt_regs * regs){ struct task_struct *tsk = current; int usig = sig; int ret; /* * translate the signal */ if (usig < 32 && tsk->exec_domain && tsk->exec_domain->signal_invmap) usig = tsk->exec_domain->signal_invmap[usig]; /* * Set up the stack frame */ if (ka->sa.sa_flags & SA_SIGINFO) ret = setup_rt_frame(usig, ka, info, oldset, regs); else ret = setup_frame(usig, ka, oldset, regs); /* * Check that the resulting registers are actually sane. */ ret |= !valid_user_regs(regs); if (ret == 0) { if (ka->sa.sa_flags & SA_ONESHOT) ka->sa.sa_handler = SIG_DFL; if (!(ka->sa.sa_flags & SA_NODEFER)) { spin_lock_irq(&tsk->sigmask_lock); sigorsets(&tsk->blocked, &tsk->blocked, &ka->sa.sa_mask); sigaddset(&tsk->blocked, sig); recalc_sigpending(tsk); spin_unlock_irq(&tsk->sigmask_lock); } return; } if (sig == SIGSEGV) ka->sa.sa_handler = SIG_DFL; force_sig(SIGSEGV, tsk);}
开发者ID:fgeraci,项目名称:cs518-sched,代码行数:49,
示例19: restore_sigframestatic int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf){ char __user *aux; sigset_t set; int err; err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set)); if (err == 0) set_current_blocked(&set); __get_user_error(regs->ARM_r0, &sf->uc.uc_mcontext.arm_r0, err); __get_user_error(regs->ARM_r1, &sf->uc.uc_mcontext.arm_r1, err); __get_user_error(regs->ARM_r2, &sf->uc.uc_mcontext.arm_r2, err); __get_user_error(regs->ARM_r3, &sf->uc.uc_mcontext.arm_r3, err); __get_user_error(regs->ARM_r4, &sf->uc.uc_mcontext.arm_r4, err); __get_user_error(regs->ARM_r5, &sf->uc.uc_mcontext.arm_r5, err); __get_user_error(regs->ARM_r6, &sf->uc.uc_mcontext.arm_r6, err); __get_user_error(regs->ARM_r7, &sf->uc.uc_mcontext.arm_r7, err); __get_user_error(regs->ARM_r8, &sf->uc.uc_mcontext.arm_r8, err); __get_user_error(regs->ARM_r9, &sf->uc.uc_mcontext.arm_r9, err); __get_user_error(regs->ARM_r10, &sf->uc.uc_mcontext.arm_r10, err); __get_user_error(regs->ARM_fp, &sf->uc.uc_mcontext.arm_fp, err); __get_user_error(regs->ARM_ip, &sf->uc.uc_mcontext.arm_ip, err); __get_user_error(regs->ARM_sp, &sf->uc.uc_mcontext.arm_sp, err); __get_user_error(regs->ARM_lr, &sf->uc.uc_mcontext.arm_lr, err); __get_user_error(regs->ARM_pc, &sf->uc.uc_mcontext.arm_pc, err); __get_user_error(regs->ARM_cpsr, &sf->uc.uc_mcontext.arm_cpsr, err); err |= !valid_user_regs(regs); aux = (char __user *) sf->uc.uc_regspace;#ifdef CONFIG_CRUNCH if (err == 0) err |= restore_crunch_context(&aux);#endif#ifdef CONFIG_IWMMXT if (err == 0) err |= restore_iwmmxt_context(&aux);#endif#ifdef CONFIG_VFP if (err == 0) err |= restore_vfp_context(&aux);#endif return err;}
开发者ID:JJungs-lee,项目名称:linux,代码行数:46,
示例20: ptrace_setregsstatic int ptrace_setregs(struct task_struct *tsk, const void __user *uregs){ struct pt_regs newregs; int ret; ret = -EFAULT; if (copy_from_user(&newregs, uregs, sizeof(newregs)) == 0) { struct pt_regs *regs = get_user_regs(tsk); ret = -EINVAL; if (valid_user_regs(&newregs)) { *regs = newregs; ret = 0; } } return ret;}
开发者ID:actiononmail,项目名称:linux-2.6,代码行数:18,
示例21: handle_signal/* * OK, we're invoking a handler */ static inthandle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *oldset, struct pt_regs * regs){ struct thread_info *thread = current_thread_info(); struct task_struct *tsk = current; int usig = sig; int ret; /* * translate the signal */ if (usig < 32 && thread->exec_domain && thread->exec_domain->signal_invmap) usig = thread->exec_domain->signal_invmap[usig]; /* * Set up the stack frame */ if (ka->sa.sa_flags & SA_SIGINFO) ret = setup_rt_frame(usig, ka, info, oldset, regs); else ret = setup_frame(usig, ka, oldset, regs); /* * Check that the resulting registers are actually sane. */ ret |= !valid_user_regs(regs); if (ret != 0) {#ifdef CONFIG_SHLOG_SYSTEM rlog_app_start( current, 0, 0, sig, 0, regs );#endif /* CONFIG_SHLOG_SYSTEM */ force_sigsegv(sig, tsk); return ret; } /* * Block the signal if we were successful. */ block_sigmask(ka, sig); return 0;}
开发者ID:ISTweak,项目名称:android_kernel_sharp_msm8960,代码行数:47,
示例22: handle_signal/* * OK, we're invoking a handler */static void handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, struct pt_regs *regs){ struct task_struct *tsk = current; sigset_t *oldset = sigmask_to_save(); int usig = sig; int ret; /* * Set up the stack frame */ if (is_compat_task()) { if (ka->sa.sa_flags & SA_SIGINFO) ret = compat_setup_rt_frame(usig, ka, info, oldset, regs); else ret = compat_setup_frame(usig, ka, oldset, regs); } else { ret = setup_rt_frame(usig, ka, info, oldset, regs); } /* * Check that the resulting registers are actually sane. */ ret |= !valid_user_regs(®s->user_regs); if (ret != 0) { force_sigsegv(sig, tsk); return; } /* * Fast forward the stepping logic so we step into the signal * handler. */ user_fastforward_single_step(tsk); signal_delivered(sig, info, ka, regs, 0);}
开发者ID:XePeleato,项目名称:android_kernel_huawei_venus,代码行数:42,
示例23: handle_signalstatic inline voidhandle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, struct pt_regs *regs, int syscall){ int ret; /* * Set up the stack frame */ ret = setup_rt_frame(sig, ka, info, sigmask_to_save(), regs); /* * Check that the resulting registers are sane */ ret |= !valid_user_regs(regs); /* * Block the signal if we were successful. */ if (ret != 0) force_sigsegv(sig, current); else signal_delivered(sig, info, ka, regs, 0);}
开发者ID:cake654326,项目名称:xpenology,代码行数:24,
示例24: handle_signal/* * OK, we're invoking a handler */ static inthandle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *oldset, struct pt_regs * regs, int syscall){ struct thread_info *thread = current_thread_info(); struct task_struct *tsk = current; int usig = sig; int ret; /* * If we were from a system call, check for system call restarting... */ if (syscall) { switch (regs->ARM_r0) { case -ERESTART_RESTARTBLOCK: case -ERESTARTNOHAND: regs->ARM_r0 = -EINTR; break; case -ERESTARTSYS: if (!(ka->sa.sa_flags & SA_RESTART)) { regs->ARM_r0 = -EINTR; break; } /* fallthrough */ case -ERESTARTNOINTR: setup_syscall_restart(regs); } } /* * translate the signal */ if (usig < 32 && thread->exec_domain && thread->exec_domain->signal_invmap) usig = thread->exec_domain->signal_invmap[usig]; /* * Set up the stack frame */ if (ka->sa.sa_flags & SA_SIGINFO) ret = setup_rt_frame(usig, ka, info, oldset, regs); else ret = setup_frame(usig, ka, oldset, regs); /* * Check that the resulting registers are actually sane. */ ret |= !valid_user_regs(regs); if (ret != 0) { force_sigsegv(sig, tsk); return ret; } /* * Block the signal if we were successful. */ spin_lock_irq(&tsk->sighand->siglock); sigorsets(&tsk->blocked, &tsk->blocked, &ka->sa.sa_mask); if (!(ka->sa.sa_flags & SA_NODEFER)) sigaddset(&tsk->blocked, sig); recalc_sigpending(); spin_unlock_irq(&tsk->sighand->siglock); return 0;}
开发者ID:12019,项目名称:android_kernel_samsung_xcover,代码行数:70,
注:本文中的valid_user_regs函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ validaddr函数代码示例 C++ valid_state函数代码示例 |