Commit graph

51 commits

Author SHA1 Message Date
Igor Zhbanov 306e665022 Fix for SIGSEGV in systemd-bootchart on short-living processes
The function svg_ps_bars() dereferencess NULL pointer in the line
	endtime = ps->last->sampledata->sampletime;
because of partially initialized ps_struct (ps->last == NULL).

If some process terminates between scaning /proc directory in the log_sample()
function and reading additional information from /proc/PID/... files,
the files couldn't be read, the loop will be continued and partially
initialized structure returned.
2013-10-15 09:40:34 -04:00
Lennart Poettering 71fda00f32 list: make our list macros a bit easier to use by not requring type spec on each invocation
We can determine the list entry type via the typeof() gcc construct, and
so we should to make the macros much shorter to use.
2013-10-14 06:11:19 +02:00
Zbigniew Jędrzejewski-Szmek 872c8faaf2 Fix write-only use of a few variables
Since the invention of read-only memory, write-only memory has been
considered deprecated. Where appropriate, either make use of the
value, or avoid writing it, to make it clear that it is not used.
2013-10-13 17:56:54 -04:00
Zbigniew Jędrzejewski-Szmek 087a30417d bootchart: remove +x permissions on .c file 2013-08-14 21:47:38 -04:00
Jason St. John 3c527fd195 bootchart: fix typos in copyright notices
"Corporation" was misspelled as "Coproration"
2013-06-12 01:40:02 -04:00
Auke Kok 184d2ed770 bootchart: cleanup unused structs and globals 2013-05-02 09:40:52 -07:00
Nathaniel Chen 8dfb6e718d Dynamically allocate bootchart logs
Instead of storing bootchart sample data in arrays, this patch moves
storage to linked lists so that there is no more limit on samples.

This patch also fixes parsing of /proc/<pid>/smaps in kernels > 3.7.
2013-05-02 09:23:01 -07:00
Lennart Poettering db5c012285 conf-parser: restrict .include usage
Disallow recursive .include, and make it unavailable in anything but
unit files.
2013-04-25 00:05:14 -03:00
Harald Hoyer 7fd1b19bc9 move _cleanup_ attribute in front of the type
http://lists.freedesktop.org/archives/systemd-devel/2013-April/010510.html
2013-04-18 09:11:22 +02:00
Auke Kok 9e6d4c613d bootchart: Fix errno usage. 2013-04-17 09:49:33 -07:00
Zbigniew Jędrzejewski-Szmek e8e581bf25 Report about syntax errors with metadata
The information about the unit for which files are being parsed
is passed all the way down. This way messages land in the journal
with proper UNIT=... or USER_UNIT=... attribution.

'systemctl status' and 'journalctl -u' not displaying those messages
has been a source of confusion for users, since the journal entry for
a misspelt setting was often logged quite a bit earlier than the
failure to start a unit.

Based-on-a-patch-by: Oleksii Shevchuk <alxchk@gmail.com>
2013-04-17 00:09:16 -04:00
Auke Kok c4d58b0b6d bootchart: put the bootchart into the journal.
This bit of code is mostly stolen from coredump.c. We construct
a simple journal message and append the bootchart file in the
journal automatically.

You can extract the latest bootchart from the current boot with
something like:

$ journalctl -b MESSAGE_ID=9f26aa562cf440c2b16c773d0479b518 --field=BOOTCHART

which prints it to stdout.

None of the other logic is touched. The journal entry is created
even if bootchart was run manually, which is probably wrong.
2013-04-15 16:28:41 -07:00
Zbigniew Jędrzejewski-Szmek 1c6330456c Use initalization instead of explicit zeroing in more places 2013-04-10 18:59:42 -04:00
Cristian Rodríguez 9607d9470e Always use our own MAX/MIN definitions
code in src/shared/macro.h only defined MAX/MIN in case
they were not defined previously. however the MAX/MIN
macros implemented in glibc are not of the "safe" kind but defined
as:

define MIN(a,b) (((a)<(b))?(a):(b))
define MAX(a,b) (((a)>(b))?(a):(b))

Avoid nasty side effects by using our own versions instead.

Also fix the warnings derived from this change.

[zj: - modify MAX3 macro to fix warning about _a shadowing _a,
     - do bootchart/svg.c too,
     - remove unused MIN3.]
2013-04-01 23:43:48 -04:00
Zbigniew Jędrzejewski-Szmek 522cd7f18b bootchart: fix a potential buffer overrun
If the configured number of samples was close to MAXSAMPLES,
the samples buffer could be overrun:

- by 1, because of off-by-one in the condition (samples > arg_samples_len),
and
- by many in case of an overrun, because the number of samples to
  capture was increased, instead of being decreased.

Simplify things by converting to a normal for-loop.

In store.c: change buffer size from 4095 to 4096. 4095 is a strange
number.
2013-03-31 14:34:08 -04:00
Zbigniew Jędrzejewski-Szmek 4cd5f79d0b bootchart: split out option parsing from main() 2013-03-31 14:33:52 -04:00
Zbigniew Jędrzejewski-Szmek 4dd1de72e8 Remove some dead code
Based on coverity report.
2013-03-31 14:28:36 -04:00
Zbigniew Jędrzejewski-Szmek c309a7137b bootchart: properly terminate string
systemd-199/src/bootchart/store.c:289: buffer_size_warning: Calling
strncpy with a maximum size argument of 256 bytes on destination array
"ps->name" of size 256 bytes might leave the destination string
unterminated.

...and indeed, the string was used as NULL-terminated later on.

pid_cmdline_strncpy is renamed to pid_cmdline_strscpy to commemorate
the fact that it *does* properly terminate the string.
2013-03-28 23:45:52 -04:00
Zbigniew Jędrzejewski-Szmek 40c2cce772 bootchart: fix two unitialized memory frees
The new gcc isn't bad!

In file included from src/bootchart/svg.c:36:0:
src/bootchart/svg.c: In function 'svg_ps_bars':
./src/shared/util.h:524:13: warning: 'enc_name' may be used uninitialized in this function [-Wmaybe-uninitialized]
         free(*(void**) p);
             ^
src/bootchart/svg.c:821:37: note: 'enc_name' was declared here
                 char _cleanup_free_*enc_name;
                                     ^
  CC     src/udev/mtd_probe/mtd_probe-probe_smartmedia.o
  XSLT     man/systemd.unit.5
In file included from src/bootchart/svg.c:36:0:
src/bootchart/svg.c: In function 'svg_pss_graph':
./src/shared/util.h:524:13: warning: 'enc_name' may be used uninitialized in this function [-Wmaybe-uninitialized]
         free(*(void**) p);
             ^
src/bootchart/svg.c:395:37: note: 'enc_name' was declared here
                 char _cleanup_free_*enc_name;
                                     ^
2013-03-21 22:39:23 -04:00
Lennart Poettering 361514aca1 bootchart: bump RLIMIT_NOFILE only after we forked us off, so that the init system inherits the kernel default 2013-03-11 22:54:36 +01:00
Lennart Poettering 6d031c0b60 bootchart: various superficial cleanups
Let's update bootchar to share the coding style a bit more with the rest
of the package.

- Some tabs/spaces fixes

- add #pragma to header

- split up header so that we have a 1:1 relation between .c and .h files
  like everywhere else

- Prefix user command line arguments/configuration settings with "arg_".

- other coding style fixes
2013-03-11 22:47:58 +01:00
Lennart Poettering e75dcf5737 bootchart: rename log.c to store.c to aovid confusion with src/shared/log.c 2013-03-11 19:18:53 +01:00
Zbigniew Jędrzejewski-Szmek 1f3523baf7 Revert "bootchart: use _cleanup_close_"
This reverts commit 0ea9530d40.

attribute(cleanup) can only be used inside functions (*of, sysfd
are leaked).

Cleanup functions are only called once when exiting scope (*f
is leaked twice).
2013-03-07 15:35:50 -05:00
Nathaniel Chen 0ea9530d40 bootchart: use _cleanup_close_
use _cleanup_{close_,fclose_} to close streams and file descriptors
2013-03-07 20:53:14 +01:00
Harald Hoyer 78da2cd926 bootchart: document -C, --cmdline parameter 2013-03-07 16:19:38 +01:00
Harald Hoyer 57dbefdf38 bootchart: use _cleanup_fclose_ 2013-03-07 16:09:27 +01:00
Harald Hoyer b9a496c166 bootchart: rename global len to samples_len 2013-03-07 16:09:25 +01:00
Harald Hoyer e90f9fa4d1 bootchart: add parameter "-C" to expand process names to the full cmdline 2013-03-07 16:09:22 +01:00
Zbigniew Jędrzejewski-Szmek 6d26799179 bootchart: rename --filter to --no-filter
Turning off filtering with --filter is just too confusing.
Config option "Filter" doesn't have to be changed, here
"Filter=yes" already meant to filter.
2013-02-16 15:16:24 -05:00
Zbigniew Jędrzejewski-Szmek 547ba5a9e8 bootchart: provide better error messages 2013-02-16 15:10:58 -05:00
Zbigniew Jędrzejewski-Szmek f1c24fea94 man: move bootchart README to manpage, docbooksify 2013-02-16 15:10:40 -05:00
Harald Hoyer 8846199d20 bootchart: if "root=/dev" is not matched, don't try to read /sys 2013-02-14 13:49:48 -08:00
Thomas Hindoe Paaboel Andersen 0e4ffbff01 bootchart: stricter checks of cli input 2013-02-14 22:04:17 +01:00
Thomas Hindoe Paaboel Andersen f7900e258d bootchart: use conf-parser & CamelCase names in .conf 2013-02-14 21:36:45 +01:00
Harald Hoyer e93450c6c0 bootchart: parse /etc/os-release rather than system-release
Also parse it early, so that we can get it in the initramfs.
2013-02-14 11:59:16 -08:00
Harald Hoyer b823b5e272 bootchart: more fixes for bootchart in the initramfs 2013-02-14 11:55:23 -08:00
Harald Hoyer a5c32cff1f honor SELinux labels, when creating and writing config files
Also split out some fileio functions to fileio.c and provide a SELinux
aware pendant in fileio-label.c

see https://bugzilla.redhat.com/show_bug.cgi?id=881577
2013-02-14 16:19:38 +01:00
William Giokas 895aeb2779 man: bootchart: change /var/log to /run/log
As of [1], bootchart stores files in /run/log, not /var/log, by default.

[1] f2f85884ca
2013-02-13 15:26:55 -08:00
William Giokas 6bb25a0582 bootchart: Fix typos and some English
bootchart.conf: direct users to `bootchart.conf(5)`, not a nonexistent
man page.

svg.c: Fix some English in the svg comment header.
  * Chrome/Chromium => Chrome, Chromium
  * firefox => Firefox
  * much more slow => more slowly
2013-02-13 05:03:48 +01:00
Harald Hoyer f2f85884ca bootchart: make bootchart work from within the initrd
With this patch, bootchart can be started from within the initramfs via
the kernel command line "rdinit=/usr/lib/systemd/systemd-bootchart"

see:
    http://harald.fedorapeople.org/downloads/bootchart-20130207-1652.svg
2013-02-12 16:06:06 -08:00
Auke Kok cd3bccaaf7 systemd-bootchart: relicense to LGPLv2.1+
When we merged systemd-bootchart we omitted relicensing this
to LGPL. Now that code is being used for other purposes we
need to make sure the code is shareable within systemd
without further problems.

The original committers and contributors of bootchart before it
was merged all have agreed with the relicensing.
2013-02-12 15:14:15 -08:00
Zbigniew Jędrzejewski-Szmek e985665d2d Add _cleanup_pclose_ and fix mismatching pipe close opened by popen()
Based-on-patch-by: Thomas Jarosch <thomas.jarosch@intra2net.com>

cppcheck reported:
[src/bootchart/svg.c:791]: (error) Mismatching allocation and deallocation: f
2013-01-25 10:38:42 -05:00
Lennart Poettering 382e77287c build-sys: add makefile to bootchart 2013-01-21 01:04:16 +01:00
Lennart Poettering 043c432b77 bootchart: no need for memset here 2013-01-14 21:24:57 +01:00
Auke Kok 2c408fbf64 bootchart: fix a -Wshadow warning for "now" 2013-01-10 15:21:52 -05:00
Auke Kok a2e9b33808 bootchart: Convert malloc/memset to calloc 2013-01-10 15:21:48 -05:00
Auke Kok 53f5329f7a bootchart: Convert !strcmp usage to streq 2013-01-10 15:21:42 -05:00
Lukas Nykryn ef2648c127 bootchart: make sure that every read buffer is null terminated 2013-01-10 15:22:58 +01:00
Thomas Hindoe Paaboel Andersen 28989b63f5 bootchart: tabs to spaces 2013-01-10 00:24:48 +01:00
Lukas Nykryn 0908dd2fd5 bootchart: check return of fopen before setvbuf in log.c 2013-01-09 17:15:19 +01:00