Patch "staging: lustre: lmv: Error not handled for lmv_find_target" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
staging: lustre: lmv: Error not handled for lmv_find_target
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
staging-lustre-lmv-error-not-handled-for-lmv_find_target.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon Nov 6 10:07:35 CET 2017
From: Ulka Vaze <[email protected]>
Date: Sat, 7 Oct 2017 22:36:55 +0000
Subject: staging: lustre: lmv: Error not handled for lmv_find_target
From: Ulka Vaze <[email protected]>
[ Upstream commit 30af99db7ab3483f5ce83ccb890533c9378c2ced ]
This issue is found by smatch; has been reported as- Unchecked usage of potential ERR_PTR result in lmv_hsm_req_count and lmv_hsm_req_build. Added ERR_PTR in both functions and also return value check added.
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6523
Reviewed-on: http://review.whamcloud.com/14918
--- drivers/staging/lustre/lustre/lmv/lmv_obd.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-)
drivers/staging/lustre/lustre/lmv/lmv_obd.c +18 -7
@@ -744,16 +744,18 @@ static int lmv_hsm_req_count(struct lmv_/* count how many requests must be sent to the given target */ for (i =0 ; i < hur->hur_request.hr_itemcount; i++) { curr_tgt =lmv_find_target (lmv, &hur->hur_user_item[i].hui_fid); +if (IS_ERR (curr_tgt)) +return PTR_ERR (curr_tgt);if (obd_uuid_equals (&curr_tgt->ltd_uuid, &tgt_mds->ltd_uuid)) nr++; }return nr; } -static void lmv_hsm_req_build (struct lmv_obd *lmv, -struct hsm_user_request *hur_in, -const struct lmv_tgt_desc *tgt_mds, -struct hsm_user_request *hur_out) +static int lmv_hsm_req_build (struct lmv_obd *lmv, +struct hsm_user_request *hur_in, +const struct lmv_tgt_desc *tgt_mds, +struct hsm_user_request *hur_out) {int i, nr_out;struct lmv_tgt_desc *curr_tgt;
@@ -764,6 +766,8 @@ static void lmv_hsm_req_build(struct lmvfor (i =0 ; i < hur_in->hur_request.hr_itemcount; i++) { curr_tgt =lmv_find_target (lmv, &hur_in->hur_user_item[i].hui_fid); +if (IS_ERR (curr_tgt)) +return PTR_ERR (curr_tgt);if (obd_uuid_equals (&curr_tgt->ltd_uuid, &tgt_mds->ltd_uuid)) { hur_out->hur_user_item[nr_out] = hur_in->hur_user_item[i];
@@ -773,6 +777,8 @@ static void lmv_hsm_req_build(struct lmv hur_out->hur_request.hr_itemcount = nr_out;memcpy (hur_data (hur_out),hur_data (hur_in), hur_in->hur_request.hr_data_len); + +return 0 ; } static int lmv_hsm_ct_unregister(struct lmv_obd *lmv, unsigned int cmd, int len,
@@ -1052,15 +1058,17 @@ static int lmv_iocontrol(unsigned int cm }else {/* split fid list to their respective MDS */ for (i =0 ; i < count; i++) { -unsigned int nr, reqlen; -int rc1;struct hsm_user_request *req; +size_t reqlen; +int nr, rc1; tgt = lmv->tgts[i];if (!tgt || !tgt->ltd_exp)continue ; nr =lmv_hsm_req_count (lmv, hur, tgt); +if (nr <0 ) +return nr;if (nr ==0 )/* nothing for this MDS */ continue ;
@@ -1072,10 +1080,13 @@ static int lmv_iocontrol(unsigned int cmif (!req)return -ENOMEM ; -lmv_hsm_req_build (lmv, hur, tgt, req); + rc1 =lmv_hsm_req_build (lmv, hur, tgt, req); +if (rc1 <0 ) + goto hsm_req_err; rc1 =obd_iocontrol (cmd, tgt->ltd_exp, reqlen, req, uarg); +hsm_req_err:if (rc1 !=0 && rc ==0 ) rc = rc1;kvfree (req);
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/staging-lustre-lmv-error-not-handled-for-lmv_find_target.patch