mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 11:30:30 +00:00
lib: fix log target removal when singlethreaded
While running singlethreaded, the RCU code is "dormant" and rcu_free is an immediate operation. This results in the log target loop accessing free'd memory if a log target removes itself while a message is printed (which is likely to happen on e.g. error conditions.) Just use frr_each_safe to avoid this issue. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
404e53da28
commit
d03440cab7
@ -401,7 +401,7 @@ void zlog_tls_buffer_flush(void)
|
||||
return;
|
||||
|
||||
rcu_read_lock();
|
||||
frr_each (zlog_targets, &zlog_targets, zt) {
|
||||
frr_each_safe (zlog_targets, &zlog_targets, zt) {
|
||||
if (!zt->logfn)
|
||||
continue;
|
||||
|
||||
@ -431,7 +431,7 @@ static void vzlog_notls(const struct xref_logmsg *xref, int prio,
|
||||
msg->stackbufsz = sizeof(stackbuf);
|
||||
|
||||
rcu_read_lock();
|
||||
frr_each (zlog_targets, &zlog_targets, zt) {
|
||||
frr_each_safe (zlog_targets, &zlog_targets, zt) {
|
||||
if (prio > zt->prio_min)
|
||||
continue;
|
||||
if (!zt->logfn)
|
||||
|
Loading…
Reference in New Issue
Block a user