mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 07:21:59 +00:00
[lib] Do not call vty_close in vty_log_out to avoid possible free memory access
2006-07-10 Andrew J. Schorr <ajschorr@alumni.princeton.edu> * vty.c: (vty_log_out) Do not call vty_close, because this could result in a parent function's accessing the freed memory. Instead, set status VTY_CLOSE and call shutdown(vty->fd, SHUT_RDWR). And add a comment on vty_close.
This commit is contained in:
parent
74542d7301
commit
9d0a3260b2
@ -1,3 +1,10 @@
|
|||||||
|
2006-07-10 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
|
||||||
|
|
||||||
|
* vty.c: (vty_log_out) Do not call vty_close, because this could
|
||||||
|
result in a parent function's accessing the freed memory.
|
||||||
|
Instead, set status VTY_CLOSE and call shutdown(vty->fd, SHUT_RDWR).
|
||||||
|
And add a comment on vty_close.
|
||||||
|
|
||||||
2006-07-10 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
|
2006-07-10 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
|
||||||
|
|
||||||
* vty.c: (vty_log_out, vty_read, vty_flush, vtysh_flush, vtysh_read)
|
* vty.c: (vty_log_out, vty_read, vty_flush, vtysh_flush, vtysh_read)
|
||||||
|
10
lib/vty.c
10
lib/vty.c
@ -186,7 +186,10 @@ vty_log_out (struct vty *vty, const char *level, const char *proto_str,
|
|||||||
zlog_warn("%s: write failed to vty client fd %d, closing: %s",
|
zlog_warn("%s: write failed to vty client fd %d, closing: %s",
|
||||||
__func__, vty->fd, safe_strerror(errno));
|
__func__, vty->fd, safe_strerror(errno));
|
||||||
buffer_reset(vty->obuf);
|
buffer_reset(vty->obuf);
|
||||||
vty_close(vty);
|
/* cannot call vty_close, because a parent routine may still try
|
||||||
|
to access the vty struct */
|
||||||
|
vty->status = VTY_CLOSE;
|
||||||
|
shutdown(vty->fd, SHUT_RDWR);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -2141,7 +2144,10 @@ vty_serv_sock (const char *addr, unsigned short port, const char *path)
|
|||||||
#endif /* VTYSH */
|
#endif /* VTYSH */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Close vty interface. */
|
/* Close vty interface. Warning: call this only from functions that
|
||||||
|
will be careful not to access the vty afterwards (since it has
|
||||||
|
now been freed). This is safest from top-level functions (called
|
||||||
|
directly by the thread dispatcher). */
|
||||||
void
|
void
|
||||||
vty_close (struct vty *vty)
|
vty_close (struct vty *vty)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user