Re: d_lookup: Unable to handle kernel paging request

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wednesday, May 22, 2019 6:29:46 PM CEST, Al Viro wrote:
...
IOW, here we have also run into bogus hlist forward pointer or head -
same 0x1000000 in one case and 0x0000880001000000 in two others.

Have you tried to see if KASAN catches anything on those loads?
Use-after-free, for example...  Another thing to try: slap
	WARN_ON(entry->d_flags & DCACHE_NORCU);
in __d_rehash() and see if it triggers.

Hi Al,
after 5 days with v5.2-rc1 + KASAN + WARN_ON could not reproduce the issue.
Neither the first day running v5.3-rc2 + WARN_ON. But today 6 times.
So, there is no KASAN and also the WARN_ON, being there, did not trigger.
The first trace hapenned while untaring a big file into tmpfs. The other
five while "git pull -r" severeal repos on f2fs.

Regards,
 Vicenç.

Unable to handle kernel paging request at virtual address 0000000001000018
Mem abort info:
 ESR = 0x96000004
 Exception class = DABT (current EL), IL = 32 bits
 SET = 0, FnV = 0
 EA = 0, S1PTW = 0
Data abort info:
 ISV = 0, ISS = 0x00000004
 CM = 0, WnR = 0
user pgtable: 4k pages, 48-bit VAs, pgdp=00000000aeab4000
[0000000001000018] pgd=0000000000000000
Internal error: Oops: 96000004 [#1] SMP
CPU: 4 PID: 1172 Comm: tar Not tainted 5.2.0-rc2 #1
Hardware name: Sapphire-RK3399 Board (DT)
pstate: 00000005 (nzcv daif -PAN -UAO)
pc : __d_lookup+0x58/0x198
lr : d_lookup+0x38/0x68
sp : ffff000012663b90
x29: ffff000012663b90 x28: ffff000012663d58 x27: 0000000000000000 x26: ffff8000ae7cc900 x25: 0000000000000001 x24: ffffffffffffffff x23: 00000000ce9c8f81 x22: 0000000000000000 x21: 0000000000000001 x20: ffff000012663d58 x19: 0000000001000000 x18: 0000000000000000 x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 x11: fefefefefefefeff x10: b4fea3d0a3a4b4fe x9 : d237122a91454b69 x8 : a0591ae4450bed6a x7 : 5845a2c80f79d4e7 x6 : 0000000000000004 x5 : 0000000000000000 x4 : ffff000012663d58 x3 : ffff000010828a68 x2 : ffff000010828000 x1 : ffff8000f3000000 x0 : 00000000000674e4 Call trace:
__d_lookup+0x58/0x198
d_lookup+0x38/0x68
path_openat+0x4a8/0xfb8
do_filp_open+0x60/0xd8
do_sys_open+0x144/0x1f8
__arm64_sys_openat+0x20/0x28
el0_svc_handler+0x74/0x140
el0_svc+0x8/0xc
Code: 92800018 a9025bf5 d2800016 52800035 (b9401a62) ---[ end trace 7fc40d1e6d2ed53e ]---
Unable to handle kernel paging request at virtual address 0000000000fffffc
Mem abort info:
 ESR = 0x96000004
 Exception class = DABT (current EL), IL = 32 bits
 SET = 0, FnV = 0
 EA = 0, S1PTW = 0
Data abort info:
 ISV = 0, ISS = 0x00000004
 CM = 0, WnR = 0
user pgtable: 4k pages, 48-bit VAs, pgdp=000000007af3e000
[0000000000fffffc] pgd=0000000000000000
Internal error: Oops: 96000004 [#1] SMP
CPU: 4 PID: 2124 Comm: git Not tainted 5.2.0-rc2 #1
Hardware name: Sapphire-RK3399 Board (DT)
pstate: 00000005 (nzcv daif -PAN -UAO)
pc : __d_lookup_rcu+0x68/0x198
lr : lookup_fast+0x44/0x2e8
sp : ffff0000130b3b60
x29: ffff0000130b3b60 x28: 00000000ce99d070 x27: ffffffffffffffff x26: 0000000000000026 x25: ffff8000ecec6030 x24: ffff0000130b3c2c x23: 0000000000000006 x22: 00000026ce99d070 x21: ffff8000811f3d80 x20: 0000000000020000 x19: 0000000001000000 x18: 0000000000000000 x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 x11: fefefefefefefeff x10: e4d0b2e6e2b4b6e9 x9 : 5096e90463dfacb0 x8 : 2b4f8961c30ebc93 x7 : aec349fb204a7256 x6 : 4fd9025392b5761a x5 : 02ff010101030100 x4 : ffff8000f3000000 x3 : ffff0000130b3d58 x2 : ffff0000130b3c2c x1 : 00000000000674ce x0 : ffff8000811f3d80 Call trace:
__d_lookup_rcu+0x68/0x198
lookup_fast+0x44/0x2e8
path_openat+0x19c/0xfb8
do_filp_open+0x60/0xd8
do_sys_open+0x144/0x1f8
__arm64_sys_openat+0x20/0x28
el0_svc_handler+0x74/0x140
el0_svc+0x8/0xc
Code: 9280001b 14000003 f9400273 b4000793 (b85fc265) ---[ end trace 6bd1b3b7588a78fe ]---
Unable to handle kernel paging request at virtual address 0000880000fffffc
Mem abort info:
 ESR = 0x96000004
 Exception class = DABT (current EL), IL = 32 bits
 SET = 0, FnV = 0
 EA = 0, S1PTW = 0
Data abort info:
 ISV = 0, ISS = 0x00000004
 CM = 0, WnR = 0
user pgtable: 4k pages, 48-bit VAs, pgdp=00000000867ac000
[0000880000fffffc] pgd=0000000000000000
Internal error: Oops: 96000004 [#2] SMP
CPU: 4 PID: 2183 Comm: git Tainted: G      D           5.2.0-rc2 #1
Hardware name: Sapphire-RK3399 Board (DT)
pstate: 00000005 (nzcv daif -PAN -UAO)
pc : __d_lookup_rcu+0x68/0x198
lr : lookup_fast+0x44/0x2e8
sp : ffff00001325ba90
x29: ffff00001325ba90 x28: 00000000ce99f075 x27: ffffffffffffffff x26: 0000000000000007 x25: ffff8000ecec402a x24: ffff00001325bb5c x23: 0000000000000007 x22: 00000007ce99f075 x21: ffff80007a810c00 x20: 0000000000000000 x19: 0000880001000000 x18: 0000000000000000 x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 x11: fefefefefefefeff x10: d0bbbcbfa6b2b9bc x9 : 0000000000000000 x8 : ffff80007a810c00 x7 : 6cad9ff29d8de19c x6 : ff94ec6f0ce3656c x5 : ffff8000ecec402a x4 : ffff8000f3000000 x3 : ffff00001325bc78 x2 : ffff00001325bb5c x1 : 00000000000674cf x0 : ffff80007a810c00 Call trace:
__d_lookup_rcu+0x68/0x198
lookup_fast+0x44/0x2e8
walk_component+0x34/0x2e0
path_lookupat.isra.0+0x5c/0x1e0
filename_lookup+0x78/0xf0
user_path_at_empty+0x44/0x58
vfs_statx+0x70/0xd0
__se_sys_newfstatat+0x20/0x40
__arm64_sys_newfstatat+0x18/0x20
el0_svc_handler+0x74/0x140
el0_svc+0x8/0xc
Code: 9280001b 14000003 f9400273 b4000793 (b85fc265) ---[ end trace 6bd1b3b7588a78ff ]---
Unable to handle kernel paging request at virtual address 0000880000fffffc
Mem abort info:
 ESR = 0x96000004
 Exception class = DABT (current EL), IL = 32 bits
 SET = 0, FnV = 0
 EA = 0, S1PTW = 0
Data abort info:
 ISV = 0, ISS = 0x00000004
 CM = 0, WnR = 0
user pgtable: 4k pages, 48-bit VAs, pgdp=00000000867ac000
[0000880000fffffc] pgd=0000000000000000
Internal error: Oops: 96000004 [#3] SMP
CPU: 4 PID: 2180 Comm: git Tainted: G      D           5.2.0-rc2 #1
Hardware name: Sapphire-RK3399 Board (DT)
pstate: 00000005 (nzcv daif -PAN -UAO)
pc : __d_lookup_rcu+0x68/0x198
lr : lookup_fast+0x44/0x2e8
sp : ffff000012a3ba90
x29: ffff000012a3ba90 x28: 00000000ce99f075 x27: ffffffffffffffff x26: 0000000000000007 x25: ffff8000ecec702a x24: ffff000012a3bb5c x23: 0000000000000007 x22: 00000007ce99f075 x21: ffff80007a810c00 x20: 0000000000000000 x19: 0000880001000000 x18: 0000000000000000 x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 x11: fefefefefefefeff x10: d0bbbcbfa6b2b9bc x9 : 0000000000000000 x8 : ffff80007a810c00 x7 : 6cad9ff29d8de19c x6 : ff94ec6f0ce3656c x5 : ffff8000ecec702a x4 : ffff8000f3000000 x3 : ffff000012a3bc78 x2 : ffff000012a3bb5c x1 : 00000000000674cf x0 : ffff80007a810c00 Call trace:
__d_lookup_rcu+0x68/0x198
lookup_fast+0x44/0x2e8
walk_component+0x34/0x2e0
path_lookupat.isra.0+0x5c/0x1e0
filename_lookup+0x78/0xf0
user_path_at_empty+0x44/0x58
vfs_statx+0x70/0xd0
__se_sys_newfstatat+0x20/0x40
__arm64_sys_newfstatat+0x18/0x20
el0_svc_handler+0x74/0x140
el0_svc+0x8/0xc
Code: 9280001b 14000003 f9400273 b4000793 (b85fc265) ---[ end trace 6bd1b3b7588a7900 ]---
Unable to handle kernel paging request at virtual address 0000880000fffffc
Mem abort info:
 ESR = 0x96000004
 Exception class = DABT (current EL), IL = 32 bits
 SET = 0, FnV = 0
 EA = 0, S1PTW = 0
Data abort info:
 ISV = 0, ISS = 0x00000004
 CM = 0, WnR = 0
user pgtable: 4k pages, 48-bit VAs, pgdp=0000000073f2f000
[0000880000fffffc] pgd=0000000000000000
Internal error: Oops: 96000004 [#4] SMP
CPU: 4 PID: 2210 Comm: git Tainted: G      D           5.2.0-rc2 #1
Hardware name: Sapphire-RK3399 Board (DT)
pstate: 00000005 (nzcv daif -PAN -UAO)
pc : __d_lookup_rcu+0x68/0x198
lr : lookup_fast+0x44/0x2e8
sp : ffff0000132bba90
x29: ffff0000132bba90 x28: 00000000ce99e1a6 x27: ffffffffffffffff x26: 000000000000000c x25: ffff8000f21dd036 x24: ffff0000132bbb5c x23: 0000000000000004 x22: 0000000cce99e1a6 x21: ffff800074dd8d80 x20: 0000000000000000 x19: 0000880001000000 x18: 0000000000000000 x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 x11: fefefefefefefeff x10: d0d0d0d0b8fea4b3 x9 : 40bcd8645005512e x8 : c433ade89ebd10f9 x7 : c6b69091eeb194d2 x6 : 848f758ca69635b4 x5 : ffff8000f21dd036 x4 : ffff8000f3000000 x3 : ffff0000132bbc78 x2 : ffff0000132bbb5c x1 : 00000000000674cf x0 : ffff800074dd8d80 Call trace:
__d_lookup_rcu+0x68/0x198
lookup_fast+0x44/0x2e8
walk_component+0x34/0x2e0
path_lookupat.isra.0+0x5c/0x1e0
filename_lookup+0x78/0xf0
user_path_at_empty+0x44/0x58
vfs_statx+0x70/0xd0
__se_sys_newfstatat+0x20/0x40
__arm64_sys_newfstatat+0x18/0x20
el0_svc_handler+0x74/0x140
el0_svc+0x8/0xc
Code: 9280001b 14000003 f9400273 b4000793 (b85fc265) ---[ end trace 6bd1b3b7588a7901 ]---
Unable to handle kernel paging request at virtual address 0000880000fffffc
Mem abort info:
 ESR = 0x96000004
 Exception class = DABT (current EL), IL = 32 bits
 SET = 0, FnV = 0
 EA = 0, S1PTW = 0
Data abort info:
 ISV = 0, ISS = 0x00000004
 CM = 0, WnR = 0
user pgtable: 4k pages, 48-bit VAs, pgdp=0000000073f2f000
[0000880000fffffc] pgd=0000000000000000
Internal error: Oops: 96000004 [#5] SMP
CPU: 5 PID: 2200 Comm: git Tainted: G      D           5.2.0-rc2 #1
Hardware name: Sapphire-RK3399 Board (DT)
pstate: 00000005 (nzcv daif -PAN -UAO)
pc : __d_lookup_rcu+0x68/0x198
lr : lookup_fast+0x44/0x2e8
sp : ffff000013263a90
x29: ffff000013263a90 x28: 00000000ce99e1a6 x27: ffffffffffffffff x26: 000000000000000c x25: ffff8000f0a6f036 x24: ffff000013263b5c x23: 0000000000000004 x22: 0000000cce99e1a6 x21: ffff800074dd8d80 x20: 0000000000000000 x19: 0000880001000000 x18: 0000000000000000 x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 x11: fefefefefefefeff x10: d0d0d0d0b8fea4b3 x9 : 40bcd8645005512e x8 : c433ade89ebd10f9 x7 : c6b69091eeb194d2 x6 : 848f758ca69635b4 x5 : ffff8000f0a6f036 x4 : ffff8000f3000000 x3 : ffff000013263c78 x2 : ffff000013263b5c x1 : 00000000000674cf x0 : ffff800074dd8d80 Call trace:
__d_lookup_rcu+0x68/0x198
lookup_fast+0x44/0x2e8
walk_component+0x34/0x2e0
path_lookupat.isra.0+0x5c/0x1e0
filename_lookup+0x78/0xf0
user_path_at_empty+0x44/0x58
vfs_statx+0x70/0xd0
__se_sys_newfstatat+0x20/0x40
__arm64_sys_newfstatat+0x18/0x20
el0_svc_handler+0x74/0x140
el0_svc+0x8/0xc
Code: 9280001b 14000003 f9400273 b4000793 (b85fc265) ---[ end trace 6bd1b3b7588a7902 ]---



00000000000001c8 <__d_rehash>:
	return dentry_hashtable + (hash >> d_hash_shift);
    1c8:	90000001 	adrp	x1, 0 <find_submount>
			1c8: R_AARCH64_ADR_PREL_PG_HI21	.data..read_mostly
    1cc:	91000022 	add	x2, x1, #0x0
			1cc: R_AARCH64_ADD_ABS_LO12_NC	.data..read_mostly

static void __d_rehash(struct dentry *entry)
{
	struct hlist_bl_head *b = d_hash(entry->d_name.hash);

	WARN_ON(entry->d_flags & DCACHE_NORCU);
    1d0:	b9400003 	ldr	w3, [x0]
	return dentry_hashtable + (hash >> d_hash_shift);
    1d4:	f9400025 	ldr	x5, [x1]
			1d4: R_AARCH64_LDST64_ABS_LO12_NC	.data..read_mostly
    1d8:	b9400841 	ldr	w1, [x2, #8]
    1dc:	b9402002 	ldr	w2, [x0, #32]
    1e0:	1ac12442 	lsr	w2, w2, w1
    1e4:	8b020ca1 	add	x1, x5, x2, lsl #3
	WARN_ON(entry->d_flags & DCACHE_NORCU);
    1e8:	37f00343 	tbnz	w3, #30, 250 <__d_rehash+0x88>
	__READ_ONCE_SIZE;
    1ec:	f9400023 	ldr	x3, [x1]
	if (READ_ONCE(*p) & mask)
    1f0:	37000283 	tbnz	w3, #0, 240 <__d_rehash+0x78>
    1f4:	f9800031 	prfm	pstl1strm, [x1]
    1f8:	c85ffc23 	ldaxr	x3, [x1]
    1fc:	b2400064 	orr	x4, x3, #0x1
    200:	c8067c24 	stxr	w6, x4, [x1]
    204:	35ffffa6 	cbnz	w6, 1f8 <__d_rehash+0x30>
	while (unlikely(test_and_set_bit_lock(bitnum, addr))) {
    208:	370001c3 	tbnz	w3, #0, 240 <__d_rehash+0x78>
		((unsigned long)h->first & ~LIST_BL_LOCKMASK);
    20c:	f86278a3 	ldr	x3, [x5, x2, lsl #3]
	hlist_bl_lock(b);
	hlist_bl_add_head_rcu(&entry->d_hash, b);
    210:	91002004 	add	x4, x0, #0x8
    214:	927ff863 	and	x3, x3, #0xfffffffffffffffe
	struct hlist_bl_node *first;

	/* don't need hlist_bl_first_rcu because we're under lock */
	first = hlist_bl_first(h);

	n->next = first;
    218:	f9000403 	str	x3, [x0, #8]
	if (first)
    21c:	b4000043 	cbz	x3, 224 <__d_rehash+0x5c>
		first->pprev = &n->next;
    220:	f9000464 	str	x4, [x3, #8]
	rcu_assign_pointer(h->first,
    224:	b2400084 	orr	x4, x4, #0x1
	n->pprev = &h->first;
    228:	f9000801 	str	x1, [x0, #16]
	rcu_assign_pointer(h->first,
    22c:	c89ffc24 	stlr	x4, [x1]
    230:	f86278a0 	ldr	x0, [x5, x2, lsl #3]
	old &= ~BIT_MASK(nr);
    234:	927ff800 	and	x0, x0, #0xfffffffffffffffe
    238:	c89ffc20 	stlr	x0, [x1]
	hlist_bl_unlock(b);
}
    23c:	d65f03c0 	ret
    240:	d503203f 	yield
    244:	f9400023 	ldr	x3, [x1]
		} while (test_bit(bitnum, addr));
    248:	3707ffc3 	tbnz	w3, #0, 240 <__d_rehash+0x78>
    24c:	17ffffe8 	b	1ec <__d_rehash+0x24>
	WARN_ON(entry->d_flags & DCACHE_NORCU);
    250:	d4210000 	brk	#0x800
	preempt_disable();
    254:	17ffffe6 	b	1ec <__d_rehash+0x24>

...

0000000000002d10 <__d_lookup_rcu>:
{
   2d10:	a9b97bfd 	stp	x29, x30, [sp, #-112]!
   2d14:	aa0103e3 	mov	x3, x1
	return dentry_hashtable + (hash >> d_hash_shift);
   2d18:	90000004 	adrp	x4, 0 <find_submount>
			2d18: R_AARCH64_ADR_PREL_PG_HI21	.data..read_mostly
{
   2d1c:	910003fd 	mov	x29, sp
   2d20:	a90153f3 	stp	x19, x20, [sp, #16]
	return dentry_hashtable + (hash >> d_hash_shift);
   2d24:	91000081 	add	x1, x4, #0x0
			2d24: R_AARCH64_ADD_ABS_LO12_NC	.data..read_mostly
{
   2d28:	a9025bf5 	stp	x21, x22, [sp, #32]
   2d2c:	a9046bf9 	stp	x25, x26, [sp, #64]
	const unsigned char *str = name->name;
   2d30:	a9406476 	ldp	x22, x25, [x3]
	return dentry_hashtable + (hash >> d_hash_shift);
   2d34:	b9400821 	ldr	w1, [x1, #8]
   2d38:	f9400084 	ldr	x4, [x4]
			2d38: R_AARCH64_LDST64_ABS_LO12_NC	.data..read_mostly
   2d3c:	1ac126c1 	lsr	w1, w22, w1
	__READ_ONCE_SIZE;
   2d40:	f8617893 	ldr	x19, [x4, x1, lsl #3]
	hlist_bl_for_each_entry_rcu(dentry, node, b, d_hash) {
   2d44:	f27ffa73 	ands	x19, x19, #0xfffffffffffffffe
   2d48:	54000920 	b.eq	2e6c <__d_lookup_rcu+0x15c>  // b.none
   2d4c:	aa0003f5 	mov	x21, x0
			if (dentry_cmp(dentry, str, hashlen_len(hashlen)) != 0)
   2d50:	d360feda 	lsr	x26, x22, #32
   2d54:	a90363f7 	stp	x23, x24, [sp, #48]
   2d58:	aa0203f8 	mov	x24, x2
   2d5c:	d3608ad7 	ubfx	x23, x22, #32, #3
   2d60:	a90573fb 	stp	x27, x28, [sp, #80]
   2d64:	2a1603fc 	mov	w28, w22
	mask = bytemask_from_count(tcount);
   2d68:	9280001b 	mov	x27, #0xffffffffffffffff    	// #-1
   2d6c:	14000003 	b	2d78 <__d_lookup_rcu+0x68>
   2d70:	f9400273 	ldr	x19, [x19]
	hlist_bl_for_each_entry_rcu(dentry, node, b, d_hash) {
   2d74:	b4000793 	cbz	x19, 2e64 <__d_lookup_rcu+0x154>
   2d78:	b85fc265 	ldur	w5, [x19, #-4]
	smp_rmb();
   2d7c:	d50339bf 	dmb	ishld
		if (dentry->d_parent != parent)
   2d80:	f9400a64 	ldr	x4, [x19, #16]
   2d84:	d1002260 	sub	x0, x19, #0x8
   2d88:	eb0402bf 	cmp	x21, x4
   2d8c:	54ffff21 	b.ne	2d70 <__d_lookup_rcu+0x60>  // b.any
	return ret & ~1;
   2d90:	121f78b4 	and	w20, w5, #0xfffffffe
	hlist_bl_for_each_entry_rcu(dentry, node, b, d_hash) {
   2d94:	aa0003e9 	mov	x9, x0
		if (d_unhashed(dentry))
   2d98:	f9400664 	ldr	x4, [x19, #8]
   2d9c:	b4fffea4 	cbz	x4, 2d70 <__d_lookup_rcu+0x60>
		if (unlikely(parent->d_flags & DCACHE_OP_COMPARE)) {
   2da0:	b94002a4 	ldr	w4, [x21]
   2da4:	37080404 	tbnz	w4, #1, 2e24 <__d_lookup_rcu+0x114>
			if (dentry->d_name.hash_len != hashlen)
   2da8:	f9401000 	ldr	x0, [x0, #32]
   2dac:	eb16001f 	cmp	x0, x22
   2db0:	54fffe01 	b.ne	2d70 <__d_lookup_rcu+0x60>  // b.any
   2db4:	f9401265 	ldr	x5, [x19, #32]
	const unsigned char *cs = READ_ONCE(dentry->d_name.name);
   2db8:	2a1a03e6 	mov	w6, w26
   2dbc:	cb050328 	sub	x8, x25, x5
   2dc0:	14000006 	b	2dd8 <__d_lookup_rcu+0xc8>
		cs += sizeof(unsigned long);
   2dc4:	910020a5 	add	x5, x5, #0x8
		if (unlikely(a != b))
   2dc8:	eb07001f 	cmp	x0, x7
   2dcc:	54fffd21 	b.ne	2d70 <__d_lookup_rcu+0x60>  // b.any
		if (!tcount)
   2dd0:	710020c6 	subs	w6, w6, #0x8
   2dd4:	54000160 	b.eq	2e00 <__d_lookup_rcu+0xf0>  // b.none
		cs += sizeof(unsigned long);
   2dd8:	8b0800a4 	add	x4, x5, x8
		if (tcount < sizeof(unsigned long))
   2ddc:	6b1700df 	cmp	w6, w23
static inline unsigned long load_unaligned_zeropad(const void *addr)
{
	unsigned long ret, offset;

	/* Load word from unaligned pointer addr */
	asm(
   2de0:	f9400087 	ldr	x7, [x4]

static __no_kasan_or_inline
unsigned long read_word_at_a_time(const void *addr)
{
	kasan_check_read(addr, 1);
	return *(unsigned long *)addr;
   2de4:	f94000a0 	ldr	x0, [x5]
   2de8:	54fffee1 	b.ne	2dc4 <__d_lookup_rcu+0xb4>  // b.any
	mask = bytemask_from_count(tcount);
   2dec:	531d72e1 	lsl	w1, w23, #3
	return unlikely(!!((a ^ b) & mask));
   2df0:	ca070000 	eor	x0, x0, x7
	mask = bytemask_from_count(tcount);
   2df4:	9ac12361 	lsl	x1, x27, x1
			if (dentry_cmp(dentry, str, hashlen_len(hashlen)) != 0)
   2df8:	ea21001f 	bics	xzr, x0, x1
   2dfc:	54fffba1 	b.ne	2d70 <__d_lookup_rcu+0x60>  // b.any
		*seqp = seq;
   2e00:	b9000314 	str	w20, [x24]
}
   2e04:	aa0903e0 	mov	x0, x9
   2e08:	a94153f3 	ldp	x19, x20, [sp, #16]
   2e0c:	a9425bf5 	ldp	x21, x22, [sp, #32]
		return dentry;
   2e10:	a94363f7 	ldp	x23, x24, [sp, #48]
}
   2e14:	a9446bf9 	ldp	x25, x26, [sp, #64]
		return dentry;
   2e18:	a94573fb 	ldp	x27, x28, [sp, #80]
}
   2e1c:	a8c77bfd 	ldp	x29, x30, [sp], #112
   2e20:	d65f03c0 	ret
			if (dentry->d_name.hash != hashlen_hash(hashlen))
   2e24:	b9402001 	ldr	w1, [x0, #32]
   2e28:	6b01039f 	cmp	w28, w1
   2e2c:	54fffa21 	b.ne	2d70 <__d_lookup_rcu+0x60>  // b.any
			tlen = dentry->d_name.len;
   2e30:	b9402401 	ldr	w1, [x0, #36]
			tname = dentry->d_name.name;
   2e34:	f9401402 	ldr	x2, [x0, #40]
	smp_rmb();
   2e38:	d50339bf 	dmb	ishld
	return unlikely(s->sequence != start);
   2e3c:	b85fc264 	ldur	w4, [x19, #-4]
			if (read_seqcount_retry(&dentry->d_seq, seq)) {
   2e40:	6b04029f 	cmp	w20, w4
   2e44:	54000221 	b.ne	2e88 <__d_lookup_rcu+0x178>  // b.any
			if (parent->d_op->d_compare(dentry,
   2e48:	f94032a4 	ldr	x4, [x21, #96]
   2e4c:	a90627e3 	stp	x3, x9, [sp, #96]
   2e50:	f9400c84 	ldr	x4, [x4, #24]
   2e54:	d63f0080 	blr	x4
   2e58:	a94627e3 	ldp	x3, x9, [sp, #96]
   2e5c:	34fffd20 	cbz	w0, 2e00 <__d_lookup_rcu+0xf0>
   2e60:	17ffffc4 	b	2d70 <__d_lookup_rcu+0x60>
   2e64:	a94363f7 	ldp	x23, x24, [sp, #48]
   2e68:	a94573fb 	ldp	x27, x28, [sp, #80]
	return NULL;
   2e6c:	d2800009 	mov	x9, #0x0                   	// #0
}
   2e70:	aa0903e0 	mov	x0, x9
   2e74:	a94153f3 	ldp	x19, x20, [sp, #16]
   2e78:	a9425bf5 	ldp	x21, x22, [sp, #32]
   2e7c:	a9446bf9 	ldp	x25, x26, [sp, #64]
   2e80:	a8c77bfd 	ldp	x29, x30, [sp], #112
   2e84:	d65f03c0 	ret
   2e88:	d503203f 	yield
	__READ_ONCE_SIZE;
   2e8c:	b85fc265 	ldur	w5, [x19, #-4]
	smp_rmb();
   2e90:	d50339bf 	dmb	ishld
		if (dentry->d_parent != parent)
   2e94:	f9400c01 	ldr	x1, [x0, #24]
	return ret & ~1;
   2e98:	121f78b4 	and	w20, w5, #0xfffffffe
   2e9c:	eb15003f 	cmp	x1, x21
   2ea0:	54fff681 	b.ne	2d70 <__d_lookup_rcu+0x60>  // b.any
   2ea4:	17ffffbd 	b	2d98 <__d_lookup_rcu+0x88>

0000000000002ea8 <__d_lookup>:
{
   2ea8:	a9b97bfd 	stp	x29, x30, [sp, #-112]!
	return dentry_hashtable + (hash >> d_hash_shift);
   2eac:	90000002 	adrp	x2, 0 <find_submount>
			2eac: R_AARCH64_ADR_PREL_PG_HI21	.data..read_mostly
   2eb0:	91000043 	add	x3, x2, #0x0
			2eb0: R_AARCH64_ADD_ABS_LO12_NC	.data..read_mostly
{
   2eb4:	910003fd 	mov	x29, sp
   2eb8:	a90573fb 	stp	x27, x28, [sp, #80]
   2ebc:	aa0103fc 	mov	x28, x1
   2ec0:	a90153f3 	stp	x19, x20, [sp, #16]
   2ec4:	a90363f7 	stp	x23, x24, [sp, #48]
   2ec8:	a9046bf9 	stp	x25, x26, [sp, #64]
   2ecc:	aa0003fa 	mov	x26, x0
	unsigned int hash = name->hash;
   2ed0:	b9400397 	ldr	w23, [x28]
	return dentry_hashtable + (hash >> d_hash_shift);
   2ed4:	b9400860 	ldr	w0, [x3, #8]
   2ed8:	f9400041 	ldr	x1, [x2]
			2ed8: R_AARCH64_LDST64_ABS_LO12_NC	.data..read_mostly
   2edc:	1ac026e0 	lsr	w0, w23, w0
   2ee0:	f8607833 	ldr	x19, [x1, x0, lsl #3]
	hlist_bl_for_each_entry_rcu(dentry, node, b, d_hash) {
   2ee4:	f27ffa73 	ands	x19, x19, #0xfffffffffffffffe
   2ee8:	54000320 	b.eq	2f4c <__d_lookup+0xa4>  // b.none
	smp_store_release(&lock->locked, 0);
   2eec:	5280001b 	mov	w27, #0x0                   	// #0
	mask = bytemask_from_count(tcount);
   2ef0:	92800018 	mov	x24, #0xffffffffffffffff    	// #-1
   2ef4:	a9025bf5 	stp	x21, x22, [sp, #32]
   2ef8:	d2800016 	mov	x22, #0x0                   	// #0
   2efc:	52800035 	mov	w21, #0x1                   	// #1
		if (dentry->d_name.hash != hash)
   2f00:	b9401a62 	ldr	w2, [x19, #24]
   2f04:	d1002274 	sub	x20, x19, #0x8
   2f08:	6b17005f 	cmp	w2, w23
   2f0c:	540001a1 	b.ne	2f40 <__d_lookup+0x98>  // b.any
   2f10:	91014279 	add	x25, x19, #0x50
   2f14:	f9800331 	prfm	pstl1strm, [x25]
   2f18:	885fff21 	ldaxr	w1, [x25]
   2f1c:	4a160020 	eor	w0, w1, w22
   2f20:	35000060 	cbnz	w0, 2f2c <__d_lookup+0x84>
   2f24:	88007f35 	stxr	w0, w21, [x25]
   2f28:	35ffff80 	cbnz	w0, 2f18 <__d_lookup+0x70>
   2f2c:	35000521 	cbnz	w1, 2fd0 <__d_lookup+0x128>
		if (dentry->d_parent != parent)
   2f30:	f9400e82 	ldr	x2, [x20, #24]
   2f34:	eb1a005f 	cmp	x2, x26
   2f38:	540001a0 	b.eq	2f6c <__d_lookup+0xc4>  // b.none
   2f3c:	089fff3b 	stlrb	w27, [x25]
   2f40:	f9400273 	ldr	x19, [x19]
	hlist_bl_for_each_entry_rcu(dentry, node, b, d_hash) {
   2f44:	b5fffdf3 	cbnz	x19, 2f00 <__d_lookup+0x58>
   2f48:	a9425bf5 	ldp	x21, x22, [sp, #32]
	struct dentry *found = NULL;
   2f4c:	d2800008 	mov	x8, #0x0                   	// #0
}
   2f50:	aa0803e0 	mov	x0, x8
   2f54:	a94153f3 	ldp	x19, x20, [sp, #16]
   2f58:	a94363f7 	ldp	x23, x24, [sp, #48]
   2f5c:	a9446bf9 	ldp	x25, x26, [sp, #64]
   2f60:	a94573fb 	ldp	x27, x28, [sp, #80]
   2f64:	a8c77bfd 	ldp	x29, x30, [sp], #112
   2f68:	d65f03c0 	ret
		if (d_unhashed(dentry))
   2f6c:	f9400660 	ldr	x0, [x19, #8]
   2f70:	b4fffe60 	cbz	x0, 2f3c <__d_lookup+0x94>
	if (likely(!(parent->d_flags & DCACHE_OP_COMPARE))) {
   2f74:	b9400340 	ldr	w0, [x26]
	hlist_bl_for_each_entry_rcu(dentry, node, b, d_hash) {
   2f78:	aa1403e8 	mov	x8, x20
	if (likely(!(parent->d_flags & DCACHE_OP_COMPARE))) {
   2f7c:	b9402681 	ldr	w1, [x20, #36]
   2f80:	370802e0 	tbnz	w0, #1, 2fdc <__d_lookup+0x134>
		if (dentry->d_name.len != name->len)
   2f84:	b9400784 	ldr	w4, [x28, #4]
   2f88:	6b04003f 	cmp	w1, w4
   2f8c:	54fffd81 	b.ne	2f3c <__d_lookup+0x94>  // b.any
		return dentry_cmp(dentry, name->name, name->len) == 0;
   2f90:	f9400787 	ldr	x7, [x28, #8]
static inline int dentry_string_cmp(const unsigned char *cs, const unsigned char *ct, unsigned tcount)
   2f94:	12000881 	and	w1, w4, #0x7
   2f98:	f9401265 	ldr	x5, [x19, #32]
   2f9c:	cb0500e7 	sub	x7, x7, x5
   2fa0:	14000003 	b	2fac <__d_lookup+0x104>
		if (!tcount)
   2fa4:	71002084 	subs	w4, w4, #0x8
   2fa8:	54000300 	b.eq	3008 <__d_lookup+0x160>  // b.none
		cs += sizeof(unsigned long);
   2fac:	8b0700a2 	add	x2, x5, x7
		if (tcount < sizeof(unsigned long))
   2fb0:	6b04003f 	cmp	w1, w4
   2fb4:	f9400046 	ldr	x6, [x2]
	return *(unsigned long *)addr;
   2fb8:	f94000a0 	ldr	x0, [x5]
   2fbc:	54000340 	b.eq	3024 <__d_lookup+0x17c>  // b.none
		cs += sizeof(unsigned long);
   2fc0:	910020a5 	add	x5, x5, #0x8
		if (unlikely(a != b))
   2fc4:	eb06001f 	cmp	x0, x6
   2fc8:	54fffee0 	b.eq	2fa4 <__d_lookup+0xfc>  // b.none
   2fcc:	17ffffdc 	b	2f3c <__d_lookup+0x94>
	queued_spin_lock_slowpath(lock, val);
   2fd0:	aa1903e0 	mov	x0, x25
   2fd4:	94000000 	bl	0 <queued_spin_lock_slowpath>
			2fd4: R_AARCH64_CALL26	queued_spin_lock_slowpath
   2fd8:	17ffffd6 	b	2f30 <__d_lookup+0x88>
	return parent->d_op->d_compare(dentry,
   2fdc:	f9403340 	ldr	x0, [x26, #96]
   2fe0:	aa1c03e3 	mov	x3, x28
   2fe4:	f9401682 	ldr	x2, [x20, #40]
   2fe8:	f90037f4 	str	x20, [sp, #104]
   2fec:	f9400c04 	ldr	x4, [x0, #24]
   2ff0:	aa1403e0 	mov	x0, x20
   2ff4:	d63f0080 	blr	x4
				       name) == 0;
   2ff8:	7100001f 	cmp	w0, #0x0
   2ffc:	1a9f17e0 	cset	w0, eq  // eq = none
   3000:	f94037e8 	ldr	x8, [sp, #104]
		if (!d_same_name(dentry, parent, name))
   3004:	34fff9c0 	cbz	w0, 2f3c <__d_lookup+0x94>
		dentry->d_lockref.count++;
   3008:	b9405e80 	ldr	w0, [x20, #92]
	smp_store_release(&lock->locked, 0);
   300c:	52800001 	mov	w1, #0x0                   	// #0
   3010:	11000400 	add	w0, w0, #0x1
   3014:	b9005e80 	str	w0, [x20, #92]
   3018:	089fff21 	stlrb	w1, [x25]
}
   301c:	a9425bf5 	ldp	x21, x22, [sp, #32]
   3020:	17ffffcc 	b	2f50 <__d_lookup+0xa8>
	mask = bytemask_from_count(tcount);
   3024:	531d7021 	lsl	w1, w1, #3
	return unlikely(!!((a ^ b) & mask));
   3028:	ca060000 	eor	x0, x0, x6
	mask = bytemask_from_count(tcount);
   302c:	9ac12301 	lsl	x1, x24, x1
   3030:	ea21001f 	bics	xzr, x0, x1
   3034:	1a9f17e0 	cset	w0, eq  // eq = none
		if (!d_same_name(dentry, parent, name))
   3038:	34fff820 	cbz	w0, 2f3c <__d_lookup+0x94>
   303c:	17fffff3 	b	3008 <__d_lookup+0x160>

0000000000003040 <d_lookup>:
{
   3040:	a9bd7bfd 	stp	x29, x30, [sp, #-48]!
   3044:	910003fd 	mov	x29, sp
   3048:	a90153f3 	stp	x19, x20, [sp, #16]
   304c:	90000013 	adrp	x19, 0 <find_submount>
			304c: R_AARCH64_ADR_PREL_PG_HI21	.data..cacheline_aligned
   3050:	aa0103f4 	mov	x20, x1
   3054:	91000273 	add	x19, x19, #0x0
			3054: R_AARCH64_ADD_ABS_LO12_NC	.data..cacheline_aligned
   3058:	a9025bf5 	stp	x21, x22, [sp, #32]
   305c:	aa0003f5 	mov	x21, x0
	__READ_ONCE_SIZE;
   3060:	b9400276 	ldr	w22, [x19]
	if (unlikely(ret & 1)) {
   3064:	370001d6 	tbnz	w22, #0, 309c <d_lookup+0x5c>
	smp_rmb();
   3068:	d50339bf 	dmb	ishld
		dentry = __d_lookup(parent, name);
   306c:	aa1403e1 	mov	x1, x20
   3070:	aa1503e0 	mov	x0, x21
   3074:	94000000 	bl	2ea8 <__d_lookup>
			3074: R_AARCH64_CALL26	__d_lookup
		if (dentry)
   3078:	b50000a0 	cbnz	x0, 308c <d_lookup+0x4c>
	smp_rmb();
   307c:	d50339bf 	dmb	ishld
	} while (read_seqretry(&rename_lock, seq));
   3080:	b9400261 	ldr	w1, [x19]
   3084:	6b16003f 	cmp	w1, w22
   3088:	54fffec1 	b.ne	3060 <d_lookup+0x20>  // b.any
}
   308c:	a94153f3 	ldp	x19, x20, [sp, #16]
   3090:	a9425bf5 	ldp	x21, x22, [sp, #32]
   3094:	a8c37bfd 	ldp	x29, x30, [sp], #48
   3098:	d65f03c0 	ret
   309c:	d503203f 	yield
   30a0:	17fffff0 	b	3060 <d_lookup+0x20>
   30a4:	d503201f 	nop





[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux