lkml.org 
[lkml]   [2020]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 2/6] arm64/vdso: Zap vvar pages when switching to a time namespace
On Wed, Jun 24, 2020 at 01:33:17AM -0700, Andrei Vagin wrote:
> The order of vvar pages depends on whether a task belongs to the root
> time namespace or not. In the root time namespace, a task doesn't have a
> per-namespace page. In a non-root namespace, the VVAR page which contains
> the system-wide VDSO data is replaced with a namespace specific page
> that contains clock offsets.
>
> Whenever a task changes its namespace, the VVAR page tables are cleared
> and then they will be re-faulted with a corresponding layout.
>
> A task can switch its time namespace only if its ->mm isn't shared with
> another task.
>
> Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
> Reviewed-by: Dmitry Safonov <dima@arista.com>
> Signed-off-by: Andrei Vagin <avagin@gmail.com>
> ---
> arch/arm64/kernel/vdso.c | 31 +++++++++++++++++++++++++++++++
> 1 file changed, 31 insertions(+)
>
> diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
> index 7c4620451fa5..bdf492a17dff 100644
> --- a/arch/arm64/kernel/vdso.c
> +++ b/arch/arm64/kernel/vdso.c
> @@ -124,6 +124,37 @@ static int __vdso_init(enum vdso_abi abi)
> return 0;
> }
>
> +#ifdef CONFIG_TIME_NS
> +/*
> + * The vvar mapping contains data for a specific time namespace, so when a task
> + * changes namespace we must unmap its vvar data for the old namespace.
> + * Subsequent faults will map in data for the new namespace.
> + *
> + * For more details see timens_setup_vdso_data().
> + */
> +int vdso_join_timens(struct task_struct *task, struct time_namespace *ns)
> +{
> + struct mm_struct *mm = task->mm;
> + struct vm_area_struct *vma;
> +
> + mmap_read_lock(mm);

Perfect, thanks! I'll adapt my patches so that my change and this change
don't conflict and can go in together. Once they're landed we can simply
turn int vdso_join_timens() into void vdso_join_timens() everywhere.

Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>

Thanks!
Christian

\
 
 \ /
  Last update: 2020-06-24 17:18    [W:0.168 / U:0.176 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site