From: Jadhav Vikram Date: Tue, 26 Apr 2016 04:15:58 +0000 (+0530) Subject: LU-7536 mdt: handling NULL dereference in mdt_reconstruct X-Git-Tag: 2.8.55~17 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F95%2F20395%2F5;p=fs%2Flustre-release.git LU-7536 mdt: handling NULL dereference in mdt_reconstruct 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 Change-Id: I489ee3dfa5972c14f37aed5307103cf329d802f7 Reviewed-on: http://review.whamcloud.com/20395 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Gu Zheng Reviewed-by: Li Xi Reviewed-by: Oleg Drokin --- diff --git a/lustre/contrib/wireshark/packet-lustre.c b/lustre/contrib/wireshark/packet-lustre.c index e07576b..f21c3fc 100644 --- a/lustre/contrib/wireshark/packet-lustre.c +++ b/lustre/contrib/wireshark/packet-lustre.c @@ -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[] = { diff --git a/lustre/mdt/mdt_recovery.c b/lustre/mdt/mdt_recovery.c index 859c40d..a2bbdc8 100644 --- a/lustre/mdt/mdt_recovery.c +++ b/lustre/mdt/mdt_recovery.c @@ -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; }