Lines Matching refs:regs

24  * If regs->ss will cause an IRET fault, change it.  Otherwise leave it
26 * user_64bit_mode(regs) would return true.
28 static void force_valid_ss(struct pt_regs *regs)
36 : [old_ss] "rm" ((u16)regs->ss));
47 regs->ss = __USER_DS;
50 static bool restore_sigcontext(struct pt_regs *regs,
62 regs->bx = sc.bx;
63 regs->cx = sc.cx;
64 regs->dx = sc.dx;
65 regs->si = sc.si;
66 regs->di = sc.di;
67 regs->bp = sc.bp;
68 regs->ax = sc.ax;
69 regs->sp = sc.sp;
70 regs->ip = sc.ip;
71 regs->r8 = sc.r8;
72 regs->r9 = sc.r9;
73 regs->r10 = sc.r10;
74 regs->r11 = sc.r11;
75 regs->r12 = sc.r12;
76 regs->r13 = sc.r13;
77 regs->r14 = sc.r14;
78 regs->r15 = sc.r15;
81 regs->cs = sc.cs | 0x03;
82 regs->ss = sc.ss | 0x03;
84 regs->flags = (regs->flags & ~FIX_EFLAGS) | (sc.flags & FIX_EFLAGS);
86 regs->orig_ax = -1;
92 if (unlikely(!(uc_flags & UC_STRICT_RESTORE_SS) && user_64bit_mode(regs)))
93 force_valid_ss(regs);
100 struct pt_regs *regs, unsigned long mask)
102 unsafe_put_user(regs->di, &sc->di, Efault);
103 unsafe_put_user(regs->si, &sc->si, Efault);
104 unsafe_put_user(regs->bp, &sc->bp, Efault);
105 unsafe_put_user(regs->sp, &sc->sp, Efault);
106 unsafe_put_user(regs->bx, &sc->bx, Efault);
107 unsafe_put_user(regs->dx, &sc->dx, Efault);
108 unsafe_put_user(regs->cx, &sc->cx, Efault);
109 unsafe_put_user(regs->ax, &sc->ax, Efault);
110 unsafe_put_user(regs->r8, &sc->r8, Efault);
111 unsafe_put_user(regs->r9, &sc->r9, Efault);
112 unsafe_put_user(regs->r10, &sc->r10, Efault);
113 unsafe_put_user(regs->r11, &sc->r11, Efault);
114 unsafe_put_user(regs->r12, &sc->r12, Efault);
115 unsafe_put_user(regs->r13, &sc->r13, Efault);
116 unsafe_put_user(regs->r14, &sc->r14, Efault);
117 unsafe_put_user(regs->r15, &sc->r15, Efault);
121 unsafe_put_user(regs->ip, &sc->ip, Efault);
122 unsafe_put_user(regs->flags, &sc->flags, Efault);
123 unsafe_put_user(regs->cs, &sc->cs, Efault);
126 unsafe_put_user(regs->ss, &sc->ss, Efault);
138 #define unsafe_put_sigcontext(sc, fp, regs, set, label) \
140 if (__unsafe_setup_sigcontext(sc, fp, regs, set->sig[0])) \
149 static unsigned long frame_uc_flags(struct pt_regs *regs)
158 if (likely(user_64bit_mode(regs)))
164 int x64_setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
175 frame = get_sigframe(ksig, regs, sizeof(struct rt_sigframe), &fp);
176 uc_flags = frame_uc_flags(regs);
184 unsafe_save_altstack(&frame->uc.uc_stack, regs->sp, Efault);
189 unsafe_put_sigcontext(&frame->uc.uc_mcontext, fp, regs, set, Efault);
202 regs->di = ksig->sig;
204 regs->ax = 0;
208 regs->si = (unsigned long)&frame->info;
209 regs->dx = (unsigned long)&frame->uc;
210 regs->ip = (unsigned long) ksig->ka.sa.sa_handler;
212 regs->sp = (unsigned long)frame;
231 regs->cs = __USER_CS;
233 if (unlikely(regs->ss != __USER_DS))
234 force_valid_ss(regs);
248 struct pt_regs *regs = current_pt_regs();
253 frame = (struct rt_sigframe __user *)(regs->sp - sizeof(long));
263 if (!restore_sigcontext(regs, &frame->uc.uc_mcontext, uc_flags))
272 return regs->ax;
275 signal_fault(regs, frame, "rt_sigreturn");
303 int x32_setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
314 frame = get_sigframe(ksig, regs, sizeof(*frame), &fp);
316 uc_flags = frame_uc_flags(regs);
327 unsafe_compat_save_altstack(&frame->uc.uc_stack, regs->sp, Efault);
331 unsafe_put_sigcontext(&frame->uc.uc_mcontext, fp, regs, set, Efault);
341 regs->sp = (unsigned long) frame;
342 regs->ip = (unsigned long) ksig->ka.sa.sa_handler;
345 regs->di = ksig->sig;
346 regs->si = (unsigned long) &frame->info;
347 regs->dx = (unsigned long) &frame->uc;
352 regs->cs = __USER_CS;
353 regs->ss = __USER_DS;
364 struct pt_regs *regs = current_pt_regs();
369 frame = (struct rt_sigframe_x32 __user *)(regs->sp - 8);
380 if (!restore_sigcontext(regs, &frame->uc.uc_mcontext, uc_flags))
389 return regs->ax;
392 signal_fault(regs, frame, "x32 rt_sigreturn");