forked from rpms/glibc
		
	* Wed Nov 30 2022 Florian Weimer <fweimer@redhat.com> - 2.34-52 - Add noarch sysroot subpackages (#2149644) * Tue Nov 29 2022 Florian Weimer <fweimer@redhat.com> - 2.34-51 - Prepare for integration of GCC 8 compatible _Static_assert (#2149102) * Fri Nov 25 2022 Arjun Shankar <arjun@redhat.com> - 2.34-50 - Sync with upstream branch release/2.34/master, commit 405b8ae13540e9fd614df614e3361ebf9abd14cf: - elf: Fix wrong fscanf usage on tst-pldd - Allow for unpriviledged nested containers - elf: Fix wrong fscanf usage on tst-pldd - x86: Fix wcsnlen-avx2 page cross length comparison [BZ #29591] - elf: Fix rtld-audit trampoline for aarch64 Resolves: #2149102 Resolves: #2149644
		
			
				
	
	
		
			47 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| commit 691f70b84a1284f35c8cf9fbf3ef3b1cec41c234
 | |
| Author: Vladislav Khmelevsky <och95@yandex.ru>
 | |
| Date:   Thu Nov 17 12:47:29 2022 +0400
 | |
| 
 | |
|     elf: Fix rtld-audit trampoline for aarch64
 | |
|     
 | |
|     This patch fixes two problems with audit:
 | |
|     
 | |
|       1. The DL_OFFSET_RV_VPCS offset was mixed up with DL_OFFSET_RG_VPCS,
 | |
|          resulting in x2 register value nulling in RG structure.
 | |
|     
 | |
|       2. We need to preserve the x8 register before function call, but
 | |
|          don't have to save it's new value and restore it before return.
 | |
|     
 | |
|     Anyway the final restore was using OFFSET_RV instead of OFFSET_RG value
 | |
|     which is wrong (althoug doesn't affect anything).
 | |
|     
 | |
|     Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 | |
|     (cherry picked from commit eb4181e9f4a512de37dad4ba623c921671584dea)
 | |
| 
 | |
| diff --git a/sysdeps/aarch64/dl-trampoline.S b/sysdeps/aarch64/dl-trampoline.S
 | |
| index 457570e7df5148c0..b84c53d1a544c1b1 100644
 | |
| --- a/sysdeps/aarch64/dl-trampoline.S
 | |
| +++ b/sysdeps/aarch64/dl-trampoline.S
 | |
| @@ -298,12 +298,11 @@ _dl_runtime_profile:
 | |
|  	stp	x2, x3, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*1]
 | |
|  	stp	x4, x5, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*2]
 | |
|  	stp	x6, x7, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*3]
 | |
| -	str	x8,     [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*4]
 | |
|  	stp	q0, q1, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*0]
 | |
|  	stp	q2, q3, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*1]
 | |
|  	stp	q4, q5, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*2]
 | |
|  	stp	q6, q7, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*3]
 | |
| -	str	xzr,    [X29, #OFFSET_RV + DL_OFFSET_RG_VPCS]
 | |
| +	str	xzr,    [X29, #OFFSET_RV + DL_OFFSET_RV_VPCS]
 | |
|  
 | |
|  	/* Setup call to pltexit  */
 | |
|  	ldp	x0, x1, [x29, #OFFSET_SAVED_CALL_X0]
 | |
| @@ -315,7 +314,6 @@ _dl_runtime_profile:
 | |
|  	ldp	x2, x3, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*1]
 | |
|  	ldp	x4, x5, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*2]
 | |
|  	ldp	x6, x7, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*3]
 | |
| -	ldr	x8,     [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*4]
 | |
|  	ldp	q0, q1, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*0]
 | |
|  	ldp	q2, q3, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*1]
 | |
|  	ldp	q4, q5, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*2]
 |