On Fri, 2014-01-24 at 11:34 -0500, Mikulas Patocka wrote:
> On alpha, USER_HZ may be higher than HZ. This results in integer overflow
> in MULDIV.
> 
> Signed-off-by: Mikulas Patocka <[email protected]>
> Cc: [email protected]
> 
> ---
>  drivers/scsi/sg.c |    2 ++
>  1 file changed, 2 insertions(+)
> 
> Index: linux-3.13/drivers/scsi/sg.c
> ===================================================================
> --- linux-3.13.orig/drivers/scsi/sg.c 2014-01-20 21:44:02.000000000 +0100
> +++ linux-3.13/drivers/scsi/sg.c      2014-01-24 17:28:02.000000000 +0100
> @@ -856,8 +856,10 @@ sg_ioctl(struct file *filp, unsigned int
>                       return result;
>               if (val < 0)
>                       return -EIO;
> +#if USER_HZ < HZ
>               if (val >= MULDIV (INT_MAX, USER_HZ, HZ))
>                   val = MULDIV (INT_MAX, USER_HZ, HZ);
> +#endif

Is this really a problem worth fixing?  Is USER_HZ ever greater than HZ?

>               sfp->timeout_user = val;

If it can happen, this needs fixing as well:

>               sfp->timeout = MULDIV (val, HZ, USER_HZ);

any val that would divide to less than 1 will now set the timeout to
zero, which will cause the queue default timeout to be applied instead.

I'd fix it in the macro rather than having code peppered with #ifs

James



--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to