there is an overflow in the code : cyz_polling_cycle = (arg * HZ) / 1000, the multiplicator arg comes from user, so it may be an overflow if arg is a big number. And the value of cyc_polling_cycle will be wrong when it is used next time.
Reported-by: Qixue Xiao <[email protected]> Suggested-by: Yongjian Xu <[email protected]> Suggested-by: Yu Chen <[email protected]> Signed-off-by: Qixue Xiao <[email protected]> --- drivers/tty/cyclades.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c index cfeec97..7eec1c5 100644 --- a/drivers/tty/cyclades.c +++ b/drivers/tty/cyclades.c @@ -2728,7 +2728,8 @@ cy_ioctl(struct tty_struct *tty, break; #ifndef CONFIG_CYZ_INTR case CYZSETPOLLCYCLE: + if (arg > LONG_MAX / HZ) + return -ENODEV; cyz_polling_cycle = (arg * HZ) / 1000; break; case CYZGETPOLLCYCLE: -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

