From 179bf9a009cd27b0055e23c1478d7b298833ce35 Mon Sep 17 00:00:00 2001 From: Oleg Drokin Date: Wed, 2 May 2018 00:48:46 -0400 Subject: [PATCH] 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. Lustre-change: https://review.whamcloud.com/32237 Lustre-commit: 6a39600f641cc3e179b0149af5ff17ba44d2319f Change-Id: I74de899ae6cea7017ae8ca9a8c488ca801a38c5d Signed-off-by: Oleg Drokin Reviewed-by: John L. Hammond Reviewed-by: Andreas Dilger Signed-off-by: Minh Diep Reviewed-on: https://review.whamcloud.com/32521 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Lai Siyao --- lustre/mdt/mdt_handler.c | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 60286eb..3fb9f6e 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -3271,38 +3271,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, @@ -3877,8 +3855,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) -- 1.8.3.1