mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	fs: dcache: manually unpoison dname after allocation to shut up kasan's reports
We need to manually unpoison rounded up allocation size for dname to avoid kasan's reports in dentry_string_cmp(). When CONFIG_DCACHE_WORD_ACCESS=y dentry_string_cmp may access few bytes beyound requested in kmalloc() size. dentry_string_cmp() relates on that fact that dentry allocated using kmalloc and kmalloc internally round up allocation size. So this is not a bug, but this makes kasan to complain about such accesses. To avoid such reports we mark rounded up allocation size in shadow as accessible. Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com> Reported-by: Dmitry Vyukov <dvyukov@google.com> Cc: Konstantin Serebryany <kcc@google.com> Cc: Dmitry Chernenkov <dmitryc@google.com> Signed-off-by: Andrey Konovalov <adech.fo@gmail.com> Cc: Yuri Gribov <tetra2005@gmail.com> Cc: Konstantin Khlebnikov <koct9i@gmail.com> Cc: Sasha Levin <sasha.levin@oracle.com> Cc: Christoph Lameter <cl@linux.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.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
							
								
									0316bec22e
								
							
						
					
					
						commit
						df4c0e36f1
					
				
					 1 changed files with 5 additions and 0 deletions
				
			
		| 
						 | 
					@ -38,6 +38,8 @@
 | 
				
			||||||
#include <linux/prefetch.h>
 | 
					#include <linux/prefetch.h>
 | 
				
			||||||
#include <linux/ratelimit.h>
 | 
					#include <linux/ratelimit.h>
 | 
				
			||||||
#include <linux/list_lru.h>
 | 
					#include <linux/list_lru.h>
 | 
				
			||||||
 | 
					#include <linux/kasan.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "internal.h"
 | 
					#include "internal.h"
 | 
				
			||||||
#include "mount.h"
 | 
					#include "mount.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1429,6 +1431,9 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		atomic_set(&p->u.count, 1);
 | 
							atomic_set(&p->u.count, 1);
 | 
				
			||||||
		dname = p->name;
 | 
							dname = p->name;
 | 
				
			||||||
 | 
							if (IS_ENABLED(CONFIG_DCACHE_WORD_ACCESS))
 | 
				
			||||||
 | 
								kasan_unpoison_shadow(dname,
 | 
				
			||||||
 | 
									round_up(name->len + 1,	sizeof(unsigned long)));
 | 
				
			||||||
	} else  {
 | 
						} else  {
 | 
				
			||||||
		dname = dentry->d_iname;
 | 
							dname = dentry->d_iname;
 | 
				
			||||||
	}	
 | 
						}	
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue