mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	kcov: make kcov work properly with KASLR enabled
Subtract KASLR offset from the kernel addresses reported by kcov. Tested on x86_64 and AArch64 (Hikey LeMaker). Link: http://lkml.kernel.org/r/1481417456-28826-3-git-send-email-alex.popov@linux.com Signed-off-by: Alexander Popov <alex.popov@linux.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Rob Herring <robh@kernel.org> Cc: Kefeng Wang <wangkefeng.wang@huawei.com> Cc: AKASHI Takahiro <takahiro.akashi@linaro.org> Cc: Jon Masters <jcm@redhat.com> Cc: David Daney <david.daney@cavium.com> Cc: Ganapatrao Kulkarni <gkulkarni@caviumnetworks.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Nicolai Stange <nicstange@gmail.com> Cc: James Morse <james.morse@arm.com> Cc: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Andrey Konovalov <andreyknvl@google.com> Cc: Alexander Popov <alex.popov@linux.com> Cc: syzkaller <syzkaller@googlegroups.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									7ede8665f2
								
							
						
					
					
						commit
						4983f0ab7f
					
				
					 1 changed files with 7 additions and 1 deletions
				
			
		|  | @ -19,6 +19,7 @@ | |||
| #include <linux/debugfs.h> | ||||
| #include <linux/uaccess.h> | ||||
| #include <linux/kcov.h> | ||||
| #include <asm/setup.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * kcov descriptor (one per opened debugfs file). | ||||
|  | @ -73,6 +74,11 @@ void notrace __sanitizer_cov_trace_pc(void) | |||
| 	if (mode == KCOV_MODE_TRACE) { | ||||
| 		unsigned long *area; | ||||
| 		unsigned long pos; | ||||
| 		unsigned long ip = _RET_IP_; | ||||
| 
 | ||||
| #ifdef CONFIG_RANDOMIZE_BASE | ||||
| 		ip -= kaslr_offset(); | ||||
| #endif | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * There is some code that runs in interrupts but for which | ||||
|  | @ -86,7 +92,7 @@ void notrace __sanitizer_cov_trace_pc(void) | |||
| 		/* The first word is number of subsequent PCs. */ | ||||
| 		pos = READ_ONCE(area[0]) + 1; | ||||
| 		if (likely(pos < t->kcov_size)) { | ||||
| 			area[pos] = _RET_IP_; | ||||
| 			area[pos] = ip; | ||||
| 			WRITE_ONCE(area[0], pos); | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Alexander Popov
						Alexander Popov