forked from mirrors/linux
		
	 2c739ced58
			
		
	
	
		2c739ced58
		
	
	
	
	
		
			
			Patch series "add fault injection to user memory access", v3. The goal of this series is to improve testing of fault-tolerance in usages of user memory access functions, by adding support for fault injection. syzkaller/syzbot are using the existing fault injection modes and will use this particular feature also. The first patch adds failure injection capability for usercopy functions. The second changes usercopy functions to use this new failure capability (copy_from_user, ...). The third patch adds get/put/clear_user failures to x86. This patch (of 3): Add a failure injection capability to improve testing of fault-tolerance in usages of user memory access functions. Add CONFIG_FAULT_INJECTION_USERCOPY to enable faults in usercopy functions. The should_fail_usercopy function is to be called by these functions (copy_from_user, get_user, ...) in order to fail or not. Signed-off-by: Albert van der Linde <alinde@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Akinobu Mita <akinobu.mita@gmail.com> Reviewed-by: Alexander Potapenko <glider@google.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Andrey Konovalov <andreyknvl@google.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Marco Elver <elver@google.com> Cc: Christoph Hellwig <hch@lst.de> Link: http://lkml.kernel.org/r/20200831171733.955393-1-alinde@google.com Link: http://lkml.kernel.org/r/20200831171733.955393-2-alinde@google.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			39 lines
		
	
	
	
		
			823 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			823 B
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0-only
 | |
| #include <linux/fault-inject.h>
 | |
| #include <linux/fault-inject-usercopy.h>
 | |
| 
 | |
| static struct {
 | |
| 	struct fault_attr attr;
 | |
| } fail_usercopy = {
 | |
| 	.attr = FAULT_ATTR_INITIALIZER,
 | |
| };
 | |
| 
 | |
| static int __init setup_fail_usercopy(char *str)
 | |
| {
 | |
| 	return setup_fault_attr(&fail_usercopy.attr, str);
 | |
| }
 | |
| __setup("fail_usercopy=", setup_fail_usercopy);
 | |
| 
 | |
| #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
 | |
| 
 | |
| static int __init fail_usercopy_debugfs(void)
 | |
| {
 | |
| 	struct dentry *dir;
 | |
| 
 | |
| 	dir = fault_create_debugfs_attr("fail_usercopy", NULL,
 | |
| 					&fail_usercopy.attr);
 | |
| 	if (IS_ERR(dir))
 | |
| 		return PTR_ERR(dir);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| late_initcall(fail_usercopy_debugfs);
 | |
| 
 | |
| #endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */
 | |
| 
 | |
| bool should_fail_usercopy(void)
 | |
| {
 | |
| 	return should_fail(&fail_usercopy.attr, 1);
 | |
| }
 | |
| EXPORT_SYMBOL_GPL(should_fail_usercopy);
 |