kernel_optimize_test/tools/thermal/tmon
Frank Asseg 6c59f64b7e tools/thermal: tmon: fix for segfault
Fixes a segfault occurring when e.g. <TAB> is pressed multiple times in the
ncurses tmon application. The segfault is caused by incrementing
cur_thermal_record in the main function without checking if it's value reached
NR_THERMAL_RECORD immediately. Since the boundary check only occurred in
update_thermal_data a race condition existed, which lead to an attempted read
beyond the last element of the trec array.

The fix was implemented by moving the cur_thermal_record incrementation to the
update_thermal_data function using a temporary variable on which the boundary
condition is checked before updating cur_thread_record, so that the variable is
never incremented beyond the trec array's boundary.

It seems the segfault does not occur on every machine: On a HP EliteBook G4 the
segfault happens, while it does not happen on a Thinkpad T540p.

Signed-off-by: Frank Asseg <frank.asseg@objecthunter.net>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2018-03-27 09:51:23 +02:00
..
.gitignore
Makefile
pid.c
README
sysfs.c tools/thermal: tmon: fix for segfault 2018-03-27 09:51:23 +02:00
tmon.8
tmon.c tools/thermal: tmon: fix for segfault 2018-03-27 09:51:23 +02:00
tmon.h
tui.c

TMON - A Monitoring and Testing Tool for Linux kernel thermal subsystem

Why TMON?
==========
Increasingly, Linux is running on thermally constrained devices. The simple
thermal relationship between processor and fan has become past for modern
computers.

As hardware vendors cope with the thermal constraints on their products, more
and more sensors are added, new cooling capabilities are introduced. The
complexity of the thermal relationship can grow exponentially among cooling
devices, zones, sensors, and trip points. They can also change dynamically.

To expose such relationship to the userspace, Linux generic thermal layer
introduced sysfs entry at /sys/class/thermal with a matrix of symbolic
links, trip point bindings, and device instances. To traverse such
matrix by hand is not a trivial task. Testing is also difficult in that
thermal conditions are often exception cases that hard to reach in
normal operations.

TMON is conceived as a tool to help visualize, tune, and test the
complex thermal subsystem.

Files
=====
	tmon.c : main function for set up and configurations.
	tui.c : handles ncurses based user interface
	sysfs.c : access to the generic thermal sysfs
	pid.c : a proportional-integral-derivative (PID) controller
	that can be used for thermal relationship training.

Requirements
============
Depends on ncurses

Build
=========
$ make
$ sudo ./tmon -h
Usage: tmon [OPTION...]
  -c, --control         cooling device in control
  -d, --daemon          run as daemon, no TUI
  -l, --log             log data to /var/tmp/tmon.log
  -h, --help            show this help message
  -t, --time-interval   set time interval for sampling
  -v, --version         show version
  -g, --debug           debug message in syslog

1. For monitoring only:
$ sudo ./tmon