only allow FID_SEQ_NORMAL from clients (LU-1532)

[LU-1552] opening lost+found: triggers (mdt_open.c:784:mdt_finish_open()) ASSERTION( ma->ma_valid & MA_INODE ) failed: Created: 21/Jun/12  Updated: 18/Apr/13  Resolved: 18/Apr/13

Status: Resolved
Project: Lustre
Component/s: None
Affects Version/s: Lustre 2.3.0
Fix Version/s: None

Type: Technical task Priority: Minor
Reporter: John Hammond Assignee: WC Triage
Resolution: Fixed Votes: 0
Labels: fid
Environment:

[root]# cat /proc/fs/lustre/version
lustre: 2.2.57
kernel: patchless_client
build: 2.2.57-ge827449-CHANGED-2.6.32-220.23.1.el6.l2.2.55


Issue Links:
Related
is related to LU-1518 Missing/bad operations in mdd_{obf,do... Resolved
Rank (Obsolete): 7794

 Description   

Opening .lustre/fid/[0x200000001:0xd:0x0]/lost+found triggers an unchecked error in mdt_reint_open() which causes a failed assertion in mdt_finish_open().

[root]# sys_stat .lustre/fid/[0xb:0x0:0x0]
cannot stat `.lustre/fid/[0xb:0x0:0x0]': No such file or directory
[root]# sys_open .lustre/fid/[0xb:0x0:0x0] r
cannot open `.lustre/fid/[0xb:0x0:0x0]' with flags 0, mode 0666: No such file or directory
[root]# sys_stat .lustre/fid/[0x200000001:0xd:0x0]/lost+found
cannot stat `.lustre/fid/[0x200000001:0xd:0x0]/lost+found': No such file or directory
[root]# sys_open .lustre/fid/[0x200000001:0xd:0x0]/lost+found r

In mdt_reint_open(), the call to mdo_lookup() is succeeding, but mo_attr_get() is failing with -ENOENT. (The return of mdd_la_get() becomes the return of mo_attr_get() here.) However the return of mo_attr_get() is only tested against -EREMOTE. Since mo_attr_get() failed, it did not set MA_INODE in ma_valid.

LustreError: 30584:0:(mdd_object.c:83:mdd_la_get()) (null): object [0xb:0x0:0x0] not found: rc = -2
LustreError: 30584:0:(mdt_open.c:784:mdt_finish_open()) ASSERTION( ma->ma_valid & MA_INODE ) failed: 
LustreError: 30584:0:(mdt_open.c:784:mdt_finish_open()) LBUG
Pid: 30584, comm: mdt_01

Call Trace:
 [<ffffffffa0308905>] libcfs_debug_dumpstack+0x55/0x80 [libcfs]
 [<ffffffffa0308f17>] lbug_with_loc+0x47/0xb0 [libcfs]
 [<ffffffffa0a64b15>] mdt_finish_open+0x12f5/0x1790 [mdt]
 [<ffffffffa0a6701b>] mdt_reint_open+0xc0b/0x1950 [mdt]
 [<ffffffffa0a351a5>] ? mdt_ucred+0x15/0x20 [mdt]
 [<ffffffffa0a50b51>] mdt_reint_rec+0x41/0xe0 [mdt]
 [<ffffffffa0a4a3aa>] mdt_reint_internal+0x50a/0x810 [mdt]
 [<ffffffffa0a4a97d>] mdt_intent_reint+0x1ed/0x500 [mdt]
 [<ffffffffa0a46cc1>] mdt_intent_policy+0x371/0x6a0 [mdt]
 [<ffffffffa05bc841>] ldlm_lock_enqueue+0x361/0x8f0 [ptlrpc]
 [<ffffffffa05e420a>] ldlm_handle_enqueue0+0x48a/0xf40 [ptlrpc]
 [<ffffffffa0a46866>] mdt_enqueue+0x46/0x130 [mdt]
 [<ffffffffa0a3c2a2>] mdt_handle_common+0x922/0x1740 [mdt]
 [<ffffffffa0a3d195>] mdt_regular_handle+0x15/0x20 [mdt]
 [<ffffffffa06128a2>] ptlrpc_server_handle_request+0x412/0xeb0 [ptlrpc]
 [<ffffffffa030965e>] ? cfs_timer_arm+0xe/0x10 [libcfs]
 [<ffffffffa0319daf>] ? lc_watchdog_touch+0x6f/0x180 [libcfs]
 [<ffffffffa060b6d2>] ? ptlrpc_wait_event+0xb2/0x2c0 [ptlrpc]
 [<ffffffff81051ba3>] ? __wake_up+0x53/0x70
 [<ffffffffa0613b17>] ptlrpc_main+0x7d7/0x1610 [ptlrpc]
 [<ffffffffa0613340>] ? ptlrpc_main+0x0/0x1610 [ptlrpc]
 [<ffffffff8100c14a>] child_rip+0xa/0x20
 [<ffffffffa0613340>] ? ptlrpc_main+0x0/0x1610 [ptlrpc]
 [<ffffffffa0613340>] ? ptlrpc_main+0x0/0x1610 [ptlrpc]
 [<ffffffff8100c140>] ? child_rip+0x0/0x20


 Comments   
Comment by Andreas Dilger [ 21/Jun/12 ]

John,
all of the "FID_SEQ_LOCAL_FILE" files should be denied access from any external node. They are all intended to be used internally by the MDS or OSS when accessing objects in the OSD filesystem. This should be fixed along with LU-1532.

These bugs are definitely an interesting class of problems, but it makes sense to step back for a bit and get the first ones fixed before seeing what other new issues can be produced.

Comment by Andreas Dilger [ 05/Jul/12 ]

These bugs are symptoms that internal files should not be accessible through .lustre.

Comment by Richard Henwood (Inactive) [ 12/Nov/12 ]

Following the reproducer on current Master does not produce the failure:

[root@lmaster-124 sys]# cd /mnt/lustre/
[root@lmaster-124 lustre]# /root/hammond/sys/sys_stat .lustre/fid/[0xb:0x0:0x0]
cannot stat `.lustre/fid/[0xb:0x0:0x0]': Invalid argument
[root@lmaster-124 lustre]# /root/hammond/sys/sys_open .lustre/fid/[0xb:0x0:0x0] r
cannot open `.lustre/fid/[0xb:0x0:0x0]' with flags 0, mode 0666: Invalid argument
[root@lmaster-124 lustre]# /root/hammond/sys/sys_stat .lustre/fid/[0x200000001:0xd:0x0]/lost+found
cannot stat `.lustre/fid/[0x200000001:0xd:0x0]/lost+found': Invalid argument
[root@lmaster-124 lustre]# /root/hammond/sys/sys_open .lustre/fid/[0x200000001:0xd:0x0]/lost+found r
cannot open `.lustre/fid/[0x200000001:0xd:0x0]/lost+found' with flags 0, mode 0666: Invalid argument

I'm assuming this has been fixed by the closing of issue LU-1532.

Generated at Sat Feb 10 01:17:39 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.