Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> writes: > On Mon, 5 Aug 2024 at 11:55, Linus Torvalds > <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: >> >> So please consider this a "maybe something like this" patch, but that >> 'arch_unmap()' really is pretty nasty > > Actually, the whole powerpc vdso code confused me. It's not the vvar > thing that wants this close thing, it's the other ones that have the > remap thing. > > .. and there were two of those error cases that needed to reset the > vdso pointer. > > That all shows just how carefully I was reading this code. > > New version - still untested, but now I've read through it one more > time - attached. Needs a slight tweak to compile, vvar_close() needs to return void. And should probably be renamed vdso_close(). Diff below if anyone else wants to test it. I'm testing it now, but it should do what we need. cheers diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 6fa041a6690a..431b46976db8 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c @@ -81,8 +81,8 @@ static int vdso64_mremap(const struct vm_special_mapping *sm, struct vm_area_str return vdso_mremap(sm, new_vma, &vdso64_end - &vdso64_start); } -static int vvar_close(const struct vm_special_mapping *sm, - struct vm_area_struct *vma) +static void vdso_close(const struct vm_special_mapping *sm, + struct vm_area_struct *vma) { struct mm_struct *mm = vma->vm_mm; mm->context.vdso = NULL; @@ -99,13 +99,13 @@ static struct vm_special_mapping vvar_spec __ro_after_init = { static struct vm_special_mapping vdso32_spec __ro_after_init = { .name = "[vdso]", .mremap = vdso32_mremap, - .close = vvar_close, + .close = vdso_close, }; static struct vm_special_mapping vdso64_spec __ro_after_init = { .name = "[vdso]", .mremap = vdso64_mremap, - .close = vvar_close, + .close = vdso_close, }; #ifdef CONFIG_TIME_NS