From 2bafc3bd5186f8094058da371a9f0e9e7d853cd6 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Mon, 3 Aug 2020 03:29:33 +0000 Subject: [PATCH] scst: Fix three potential integer overflows git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9103 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scst/src/scst_lib.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scst/src/scst_lib.c b/scst/src/scst_lib.c index 856b580c8..d01481885 100644 --- a/scst/src/scst_lib.c +++ b/scst/src/scst_lib.c @@ -3640,7 +3640,7 @@ static int scst_full_len_to_data_len(u32 full_len, u32 block_shift) u64 res; u32 rem; - res = full_len << block_shift; + res = (u64)full_len << block_shift; rem = do_div(res, (1 << block_shift) + (1 << SCST_DIF_TAG_SHIFT)); if (unlikely(rem != 0)) TRACE(TRACE_MINOR, "Reminder %d for full len! (full len%d)", @@ -3665,7 +3665,7 @@ int scst_cmd_get_expected_transfer_len_data(struct scst_cmd *cmd) if (!cmd->tgt_dif_data_expected) return cmd->expected_transfer_len_full; - res = cmd->expected_transfer_len_full << cmd->dev->block_shift; + res = (u64)cmd->expected_transfer_len_full << cmd->dev->block_shift; rem = do_div(res, cmd->dev->block_size + (1 << SCST_DIF_TAG_SHIFT)); if (unlikely(rem != 0)) TRACE(TRACE_MINOR, "Reminder %d for expected transfer len " @@ -3691,7 +3691,7 @@ int scst_cmd_get_expected_transfer_len_dif(struct scst_cmd *cmd) if (!cmd->tgt_dif_data_expected) return 0; - res = cmd->expected_transfer_len_full << SCST_DIF_TAG_SHIFT; + res = (u64)cmd->expected_transfer_len_full << SCST_DIF_TAG_SHIFT; rem = do_div(res, cmd->dev->block_size + (1 << SCST_DIF_TAG_SHIFT)); if (unlikely(rem != 0)) TRACE(TRACE_MINOR, "Reminder %d for expected transfer len dif! "