[PATCH v5 4/5] powerpc/vdso: Wire up getrandom() vDSO implementation on VDSO32

Jason A. Donenfeld Jason at zx2c4.com
Fri Sep 6 02:13:29 AEST 2024


> +/*
> + * The macro sets two stack frames, one for the caller and one for the callee
> + * because there are no requirement for the caller to set a stack frame when
> + * calling VDSO so it may have omitted to set one, especially on PPC64
> + */
> +
> +.macro cvdso_call funct
> +  .cfi_startproc
> +	PPC_STLU	r1, -PPC_MIN_STKFRM(r1)
> +  .cfi_adjust_cfa_offset PPC_MIN_STKFRM
> +	mflr		r0
> +	PPC_STLU	r1, -PPC_MIN_STKFRM(r1)
> +  .cfi_adjust_cfa_offset PPC_MIN_STKFRM
> +	PPC_STL		r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1)
> +  .cfi_rel_offset lr, PPC_MIN_STKFRM + PPC_LR_STKOFF
> +	get_datapage	r8
> +	addi		r8, r8, VDSO_RNG_DATA_OFFSET
> +	bl		CFUNC(DOTSYM(\funct))
> +	PPC_LL		r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1)
> +	cmpwi		r3, 0
> +	mtlr		r0
> +	addi		r1, r1, 2 * PPC_MIN_STKFRM
> +  .cfi_restore lr
> +  .cfi_def_cfa_offset 0
> +	crclr		so
> +	bgelr+
> +	crset		so
> +	neg		r3, r3
> +	blr
> +  .cfi_endproc
> +.endm

You wrote in an earlier email that this worked with time namespaces, but
in my testing that doesn't seem to be the case.



More information about the Linuxppc-dev mailing list