]> git.ipfire.org Git - thirdparty/systemd.git/commit - src/core/manager.c
manager: flush memory stream before using the buffer
authorDaniel Mack <zonque@gmail.com>
Fri, 7 Mar 2014 13:43:59 +0000 (14:43 +0100)
committerDaniel Mack <zonque@gmail.com>
Fri, 7 Mar 2014 14:15:56 +0000 (15:15 +0100)
commitb2cdc6664ef6b56e47d38649d69b9943d9f9f5d0
tree5aeb2628e0ba2d0b0738b999ecf6279997f61f87
parent8a39439e08cf14c22e9f1ca5e69d1ba499075051
manager: flush memory stream before using the buffer

When the manager receives a SIGUSR2 signal, it opens a memory stream
with open_memstream(), uses the returned file handle for logging, and
dumps the logged content with log_dump().

However, the char* buffer is only safe to use after the file handle has
been flushed with fflush, as the man pages states:

  When the stream is closed (fclose(3)) or flushed (fflush(3)), the
  locations pointed to by ptr and sizeloc are updated to contain,
  respectively, a pointer to the buffer and the current size of  the
  buffer.
  These values remain valid only as long as the caller performs no
  further output on the stream.  If further output is performed, then the
  stream must again be flushed before trying to access these variables.

Without that call, dump remains NULL and the daemon crashes in
log_dump().
src/core/manager.c