@ -243,7 +243,8 @@ static inline void spec_mitigate(struct task_struct *task,
}
static inline void seccomp_assign_mode ( struct task_struct * task ,
unsigned long seccomp_mode )
unsigned long seccomp_mode ,
unsigned long flags )
{
assert_spin_locked ( & task - > sighand - > siglock ) ;
@ -253,8 +254,9 @@ static inline void seccomp_assign_mode(struct task_struct *task,
* filter ) is set .
*/
smp_mb__before_atomic ( ) ;
/* Assume seccomp processes want speculation flaw mitigation. */
spec_mitigate ( task , PR_SPEC_STORE_BYPASS ) ;
/* Assume default seccomp processes want spec flaw mitigation. */
if ( ( flags & SECCOMP_FILTER_FLAG_SPEC_ALLOW ) = = 0 )
spec_mitigate ( task , PR_SPEC_STORE_BYPASS ) ;
set_tsk_thread_flag ( task , TIF_SECCOMP ) ;
}
@ -322,7 +324,7 @@ static inline pid_t seccomp_can_sync_threads(void)
* without dropping the locks .
*
*/
static inline void seccomp_sync_threads ( void )
static inline void seccomp_sync_threads ( unsigned long flags )
{
struct task_struct * thread , * caller ;
@ -363,7 +365,8 @@ static inline void seccomp_sync_threads(void)
* allow one thread to transition the other .
*/
if ( thread - > seccomp . mode = = SECCOMP_MODE_DISABLED )
seccomp_assign_mode ( thread , SECCOMP_MODE_FILTER ) ;
seccomp_assign_mode ( thread , SECCOMP_MODE_FILTER ,
flags ) ;
}
}
@ -486,7 +489,7 @@ static long seccomp_attach_filter(unsigned int flags,
/* Now that the new filter is in place, synchronize to all threads. */
if ( flags & SECCOMP_FILTER_FLAG_TSYNC )
seccomp_sync_threads ( ) ;
seccomp_sync_threads ( flags ) ;
return 0 ;
}
@ -835,7 +838,7 @@ static long seccomp_set_mode_strict(void)
# ifdef TIF_NOTSC
disable_TSC ( ) ;
# endif
seccomp_assign_mode ( current , seccomp_mode ) ;
seccomp_assign_mode ( current , seccomp_mode , 0 ) ;
ret = 0 ;
out :
@ -893,7 +896,7 @@ static long seccomp_set_mode_filter(unsigned int flags,
/* Do not free the successfully attached filter. */
prepared = NULL ;
seccomp_assign_mode ( current , seccomp_mode ) ;
seccomp_assign_mode ( current , seccomp_mode , flags ) ;
out :
spin_unlock_irq ( & current - > sighand - > siglock ) ;
if ( flags & SECCOMP_FILTER_FLAG_TSYNC )