From b3758b0db92772ba2b9421e5fba7c3440b337e5b Mon Sep 17 00:00:00 2001 From: Vladislav Bolkhovitin Date: Sat, 20 May 2017 02:04:16 +0000 Subject: [PATCH] scst: compute max_transfer args as long, not int Compute max_transfer args as long, not int, to avoid overflow when max_sg_cnt=32768 and PAGE_SHIFT=16 (64K PAGE_SIZE). Note it is not only the min() call, but also the << PAGE_SHIFT needs to be long. Signed-off-by: David Butterfield git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@7189 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scst/src/dev_handlers/scst_vdisk.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scst/src/dev_handlers/scst_vdisk.c b/scst/src/dev_handlers/scst_vdisk.c index 1c2340882..2b51cbdb8 100644 --- a/scst/src/dev_handlers/scst_vdisk.c +++ b/scst/src/dev_handlers/scst_vdisk.c @@ -4291,8 +4291,8 @@ static int vdisk_block_limits(uint8_t *buf, struct scst_cmd *cmd, put_unaligned_be16(max_t(int, PAGE_SIZE / dev->block_size, 1), &buf[6]); /* Max transfer len is min of sg limit and 8M */ - max_transfer = min_t(int, cmd->tgt_dev->max_sg_cnt << PAGE_SHIFT, - 8*1024*1024) / dev->block_size; + max_transfer = min((long)cmd->tgt_dev->max_sg_cnt << PAGE_SHIFT, + 8*1024*1024l) / dev->block_size; put_unaligned_be32(max_transfer, &buf[8]); /*