mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 03:28:31 +00:00
lib: Add a Dev catch for when a timer is set for > 1 year
Since there are timers that are created based upon doing some math and we know that unsigned values when doing math and we accidently subtract a larger number from a smaller number causes the unsigned number to wrap to very large numbers, let's put in a small catch in place to see if there are any places in the system that mistakes are made and FRR is accidently creating a problem for itself. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
parent
41ff140670
commit
e2eff5c3b1
@ -68,6 +68,12 @@ static struct log_ref ferr_lib_warn[] = {
|
|||||||
.description = "The Event subsystem has detected a file descriptor read/write event without an associated handling function. This is a bug, please collect log data and open an issue.",
|
.description = "The Event subsystem has detected a file descriptor read/write event without an associated handling function. This is a bug, please collect log data and open an issue.",
|
||||||
.suggestion = "Gather log data and open an Issue",
|
.suggestion = "Gather log data and open an Issue",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.code = EC_LIB_TIMER_TOO_LONG,
|
||||||
|
.title = "The Event subsystem has detected an internal timer that is scheduled to pop in greater than one year",
|
||||||
|
.description = "The Event subsystem has detected a timer being started that will pop in a timer that is greater than one year. This is a bug, please collect log data and open an issue.",
|
||||||
|
.suggestion = "Gather log data and open an Issue",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.code = EC_LIB_RMAP_RECURSION_LIMIT,
|
.code = EC_LIB_RMAP_RECURSION_LIMIT,
|
||||||
.title = "Reached the Route-Map Recursion Limit",
|
.title = "Reached the Route-Map Recursion Limit",
|
||||||
|
@ -48,6 +48,7 @@ enum lib_log_refs {
|
|||||||
EC_LIB_SLOW_THREAD_WALL,
|
EC_LIB_SLOW_THREAD_WALL,
|
||||||
EC_LIB_STARVE_THREAD,
|
EC_LIB_STARVE_THREAD,
|
||||||
EC_LIB_NO_THREAD,
|
EC_LIB_NO_THREAD,
|
||||||
|
EC_LIB_TIMER_TOO_LONG,
|
||||||
EC_LIB_RMAP_RECURSION_LIMIT,
|
EC_LIB_RMAP_RECURSION_LIMIT,
|
||||||
EC_LIB_BACKUP_CONFIG,
|
EC_LIB_BACKUP_CONFIG,
|
||||||
EC_LIB_VRF_LENGTH,
|
EC_LIB_VRF_LENGTH,
|
||||||
|
@ -1052,6 +1052,12 @@ static void _thread_add_timer_timeval(const struct xref_threadsched *xref,
|
|||||||
if (thread_timer_list_first(&m->timer) == thread)
|
if (thread_timer_list_first(&m->timer) == thread)
|
||||||
AWAKEN(m);
|
AWAKEN(m);
|
||||||
}
|
}
|
||||||
|
#define ONEYEAR2SEC (60 * 60 * 24 * 365)
|
||||||
|
if (time_relative->tv_sec > ONEYEAR2SEC)
|
||||||
|
flog_err(
|
||||||
|
EC_LIB_TIMER_TOO_LONG,
|
||||||
|
"Timer: %pTHD is created with an expiration that is greater than 1 year",
|
||||||
|
thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user