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;
|
return;
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
frr_each (zlog_targets, &zlog_targets, zt) {
|
frr_each_safe (zlog_targets, &zlog_targets, zt) {
|
||||||
if (!zt->logfn)
|
if (!zt->logfn)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -431,7 +431,7 @@ static void vzlog_notls(const struct xref_logmsg *xref, int prio,
|
|||||||
msg->stackbufsz = sizeof(stackbuf);
|
msg->stackbufsz = sizeof(stackbuf);
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
frr_each (zlog_targets, &zlog_targets, zt) {
|
frr_each_safe (zlog_targets, &zlog_targets, zt) {
|
||||||
if (prio > zt->prio_min)
|
if (prio > zt->prio_min)
|
||||||
continue;
|
continue;
|
||||||
if (!zt->logfn)
|
if (!zt->logfn)
|
||||||
|
Loading…
Reference in New Issue
Block a user