Search
j0ke.net Open Build Service
>
Projects
>
GFS
>
multipath-tools
> multipath-tools-logbuf-overflow
Sign Up
|
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File multipath-tools-logbuf-overflow of Package multipath-tools
tree 25af0bca1ae9fc77c5dfb1aa252c1ef904ffa301 parent 668c3b492216ecdb3cb77be5eb3eeea5691a0861 author Hannes Reinecke <hare@suse.de> 1173948671 +0100 committer Hannes Reinecke <hare@suse.de> 1173948671 +0100 [libmultipath] Fix overflow in circular queue Multipathd has a circular buffer where messages are stored prior to being passed into the system logs. Under certain circumstances the circular buffer fills up; and the intention appears to be that new messages are dropped until space is freed in the buffer. However sometimes the result of a full circular buffer is to overwrite the earlier messages before they have been passed to the system buffer; resulting in the loss of early messages and corruption of later messages. References: 245886 Signed-off-by: Hannes Reinecke <hare@suse.de> 33c718759316f2252eda217db5fdab1df09f58cd libmultipath/log.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/libmultipath/log.c b/libmultipath/log.c index 8b339d7..90e4d1f 100644 --- a/libmultipath/log.c +++ b/libmultipath/log.c @@ -118,6 +118,11 @@ int log_enqueue (int prio, const char * /* not enough space on tail : rewind */ if (la->head <= la->tail && len > (la->end - la->tail)) { logdbg(stderr, "enqueue: rewind tail to %p\n", la->tail); + if (la->head == la->start ) { + logdbg(stderr, "enqueue: can not rewind tail, drop msg\n"); + la->tail = lastmsg; + return 1; /* can't reuse */ + } la->tail = la->start; if (la->empty)