Whamcloud - gitweb
LU-7536 mdt: handling NULL dereference in mdt_reconstruct 95/20395/5
authorJadhav Vikram <jadhav.vikram@seagate.com>
Tue, 26 Apr 2016 04:15:58 +0000 (09:45 +0530)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 16 Jun 2016 22:15:01 +0000 (22:15 +0000)
mdt_reconstruct function corresponding to op-code
REINT_MIGRATE is not present, so as per request format
used in mdt_reint adding mdt reconstruct functions.
Also added assertion to check max opcodes and undefined
reconstruct function. Also updated opcode REINT_RMENTRY
and REINT_MIGRADE at missing places.

Seagate-bug-id: MRP-3205
Signed-off-by: Jadhav Vikram <jadhav.vikram@seagate.com>
Change-Id: I489ee3dfa5972c14f37aed5307103cf329d802f7
Reviewed-on: http://review.whamcloud.com/20395
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Gu Zheng <gzheng@ddn.com>
Reviewed-by: Li Xi <lixi@ddn.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/contrib/wireshark/packet-lustre.c
lustre/mdt/mdt_recovery.c

index e07576b..f21c3fc 100644 (file)
@@ -253,8 +253,8 @@ typedef enum {
   REINT_RENAME   = 5,
   REINT_OPEN     = 6,
   REINT_SETXATTR = 7,
-  //      REINT_CLOSE    = 8,
-  //      REINT_WRITE    = 9,
+  REINT_RMENTRY  = 8,
+  REINT_MIGRATE  = 9,
   REINT_MAX
 } mds_reint_t;
 
@@ -1127,6 +1127,8 @@ const value_string lustre_mds_reint_t_vals[] = {
   { REINT_RENAME, "REINT_RENAME" },
   { REINT_OPEN, "REINT_OPEN" },
   { REINT_SETXATTR, "REINT_SETXATTR" },
+  { REINT_RMENTRY, "REINT_RMENTRY" },
+  { REINT_MIGRATE, "REINT_MIGRATE" },
   { 0, NULL }
 };
 const value_string lustre_op_codes[] = {
index 859c40d..a2bbdc8 100644 (file)
@@ -332,13 +332,18 @@ static mdt_reconstructor reconstructors[REINT_MAX] = {
         [REINT_UNLINK]   = mdt_reconstruct_generic,
         [REINT_RENAME]   = mdt_reconstruct_generic,
         [REINT_OPEN]     = mdt_reconstruct_open,
-        [REINT_SETXATTR] = mdt_reconstruct_generic
+       [REINT_SETXATTR] = mdt_reconstruct_generic,
+       [REINT_RMENTRY]  = mdt_reconstruct_generic,
+       [REINT_MIGRATE] = mdt_reconstruct_generic
 };
 
 void mdt_reconstruct(struct mdt_thread_info *mti,
                      struct mdt_lock_handle *lhc)
 {
+       mdt_reconstructor reconst;
         ENTRY;
-        reconstructors[mti->mti_rr.rr_opcode](mti, lhc);
+       LASSERT(mti->mti_rr.rr_opcode < REINT_MAX &&
+               (reconst = reconstructors[mti->mti_rr.rr_opcode]) != NULL);
+       reconst(mti, lhc);
         EXIT;
 }