From: Oleg Drokin Date: Wed, 2 May 2018 04:48:46 +0000 (-0400) Subject: LU-10985 mdt: properly handle unknown intent requests X-Git-Tag: 2.11.52~17 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=6a39600f641cc3e179b0149af5ff17ba44d2319f LU-10985 mdt: properly handle unknown intent requests Invalid intent requests should be rejected early on, so the later code does not make any assumptions about validity of various structures like extended pills and such. Change-Id: I74de899ae6cea7017ae8ca9a8c488ca801a38c5d Signed-off-by: Oleg Drokin Reviewed-on: https://review.whamcloud.com/32237 Tested-by: Jenkins Reviewed-by: John L. Hammond Tested-by: Maloo Reviewed-by: Andreas Dilger --- diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index e349367..2ee7154 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -3457,38 +3457,16 @@ static struct mdt_it_flavor { .it_act = mdt_intent_reint, .it_reint = REINT_OPEN }, - [MDT_IT_CREATE] = { - .it_fmt = &RQF_LDLM_INTENT, - .it_flags = MUTABOR, - .it_act = mdt_intent_reint, - .it_reint = REINT_CREATE - }, [MDT_IT_GETATTR] = { .it_fmt = &RQF_LDLM_INTENT_GETATTR, .it_flags = HABEO_REFERO, .it_act = mdt_intent_getattr }, - [MDT_IT_READDIR] = { - .it_fmt = NULL, - .it_flags = 0, - .it_act = NULL - }, [MDT_IT_LOOKUP] = { .it_fmt = &RQF_LDLM_INTENT_GETATTR, .it_flags = HABEO_REFERO, .it_act = mdt_intent_getattr }, - [MDT_IT_UNLINK] = { - .it_fmt = &RQF_LDLM_INTENT_UNLINK, - .it_flags = MUTABOR, - .it_act = NULL, - .it_reint = REINT_UNLINK - }, - [MDT_IT_TRUNC] = { - .it_fmt = NULL, - .it_flags = MUTABOR, - .it_act = NULL - }, [MDT_IT_GETXATTR] = { .it_fmt = &RQF_LDLM_INTENT_GETXATTR, .it_flags = HABEO_CORPUS, @@ -4085,8 +4063,12 @@ static int mdt_intent_opc(enum ldlm_intent_flags itopc, } flv = &mdt_it_flavor[opc]; - if (flv->it_fmt != NULL) - req_capsule_extend(pill, flv->it_fmt); + + /* Fail early on unknown requests. */ + if (flv->it_fmt == NULL) + RETURN(-EPROTO); + + req_capsule_extend(pill, flv->it_fmt); rc = mdt_unpack_req_pack_rep(info, flv->it_flags); if (rc < 0)