|
@@ -1666,19 +1666,20 @@ void syscall_trace_exit(struct pt_regs *regs)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
- * SPSR_ELx bits which are always architecturally RES0 per ARM DDI 0487C.a
|
|
|
|
|
- * We also take into account DIT (bit 24), which is not yet documented, and
|
|
|
|
|
- * treat PAN and UAO as RES0 bits, as they are meaningless at EL0, and may be
|
|
|
|
|
- * allocated an EL0 meaning in future.
|
|
|
|
|
|
|
+ * SPSR_ELx bits which are always architecturally RES0 per ARM DDI 0487D.a.
|
|
|
|
|
+ * We permit userspace to set SSBS (AArch64 bit 12, AArch32 bit 23) which is
|
|
|
|
|
+ * not described in ARM DDI 0487D.a.
|
|
|
|
|
+ * We treat PAN and UAO as RES0 bits, as they are meaningless at EL0, and may
|
|
|
|
|
+ * be allocated an EL0 meaning in future.
|
|
|
* Userspace cannot use these until they have an architectural meaning.
|
|
* Userspace cannot use these until they have an architectural meaning.
|
|
|
* Note that this follows the SPSR_ELx format, not the AArch32 PSR format.
|
|
* Note that this follows the SPSR_ELx format, not the AArch32 PSR format.
|
|
|
* We also reserve IL for the kernel; SS is handled dynamically.
|
|
* We also reserve IL for the kernel; SS is handled dynamically.
|
|
|
*/
|
|
*/
|
|
|
#define SPSR_EL1_AARCH64_RES0_BITS \
|
|
#define SPSR_EL1_AARCH64_RES0_BITS \
|
|
|
- (GENMASK_ULL(63,32) | GENMASK_ULL(27, 25) | GENMASK_ULL(23, 22) | \
|
|
|
|
|
- GENMASK_ULL(20, 10) | GENMASK_ULL(5, 5))
|
|
|
|
|
|
|
+ (GENMASK_ULL(63, 32) | GENMASK_ULL(27, 25) | GENMASK_ULL(23, 22) | \
|
|
|
|
|
+ GENMASK_ULL(20, 13) | GENMASK_ULL(11, 10) | GENMASK_ULL(5, 5))
|
|
|
#define SPSR_EL1_AARCH32_RES0_BITS \
|
|
#define SPSR_EL1_AARCH32_RES0_BITS \
|
|
|
- (GENMASK_ULL(63,32) | GENMASK_ULL(23, 22) | GENMASK_ULL(20,20))
|
|
|
|
|
|
|
+ (GENMASK_ULL(63, 32) | GENMASK_ULL(22, 22) | GENMASK_ULL(20, 20))
|
|
|
|
|
|
|
|
static int valid_compat_regs(struct user_pt_regs *regs)
|
|
static int valid_compat_regs(struct user_pt_regs *regs)
|
|
|
{
|
|
{
|