tcp_hybla: fix divide by zero on rtt0 == 0

rtt0 is the reference RTT in ms, so 0 makes no sense, and
hybla_recalc_param() divides by it right from hybla_init().

Reject values below 1 when the parameter is written. Also cap it at
U32_MAX / USEC_PER_MSEC, since rtt0 * USEC_PER_MSEC can wrap to 0 on
32-bit. An rtt0 above that (about 71 minutes) makes no sense anyway.

Fixes: 835b3f0c0d ("[TCP]: Add TCP Hybla congestion control module.")
Fixes: 740b0f1841 ("tcp: switch rtt estimations to usec resolution")
Reported-by: VEGA <vega@nebusec.ai>
Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Reviewed-by: Eric Dumazet <edumazet@kernel.org>
Link: https://patch.msgid.link/20261008092641.140777-3-jiayuan.chen@linux.dev
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Jiayuan Chen 2026-10-08 17:26:35 +08:00 committed by Paolo Abeni
parent 8edbf6c233
commit f09eb97322

View File

@ -26,8 +26,20 @@ struct hybla {
};
/* Hybla reference round trip time (default= 1/40 sec = 25 ms), in ms */
static int rtt0 = 25;
module_param(rtt0, int, 0644);
static unsigned int rtt0 = 25;
static int rtt0_set(const char *val, const struct kernel_param *kp)
{
/* avoid rtt0 * USEC_PER_MSEC overflow */
return param_set_uint_minmax(val, kp, 1, U32_MAX / USEC_PER_MSEC);
}
static const struct kernel_param_ops rtt0_ops = {
.set = rtt0_set,
.get = param_get_uint,
};
module_param_cb(rtt0, &rtt0_ops, &rtt0, 0644);
MODULE_PARM_DESC(rtt0, "reference rout trip time (ms)");
/* This is called to refresh values for hybla parameters */