staging/lustre/llite: don't panic when fid is insane
authorSergey Cheremencev <sergey.cheremencev@seagate.com>
Mon, 20 Jun 2016 20:55:44 +0000 (16:55 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Jun 2016 21:28:39 +0000 (14:28 -0700)
LASSERT should never be done on data that is
received to over the network. Return EINVAL
when server returns invalid fid despite of
it_status == 0.

Signed-off-by: Sergey Cheremencev <sergey.cheremencev@seagate.com>
Seagate-bug-id: MRP-3073
Reviewed-on: http://review.whamcloud.com/17985
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-7422
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Signed-off-by: Oleg Drokin <green@linuxhacker.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lustre/llite/llite_lib.c

index a741d6a07f2df13dcd6f371a94e55d62fe226bb6..546063e728db1cd9e3bb20c9d9276d7d399a7d49 100644 (file)
@@ -1918,7 +1918,13 @@ int ll_prep_inode(struct inode **inode, struct ptlrpc_request *req,
                 * At this point server returns to client's same fid as client
                 * generated for creating. So using ->fid1 is okay here.
                 */
-               LASSERT(fid_is_sane(&md.body->fid1));
+               if (!fid_is_sane(&md.body->fid1)) {
+                       CERROR("%s: Fid is insane " DFID "\n",
+                              ll_get_fsname(sb, NULL, 0),
+                              PFID(&md.body->fid1));
+                       rc = -EINVAL;
+                       goto out;
+               }
 
                *inode = ll_iget(sb, cl_fid_build_ino(&md.body->fid1,
                                             sbi->ll_flags & LL_SBI_32BIT_API),