241 Commits
Author SHA1 Message Date
Auke Kok da8a8ef85c Add github actions CI. 2019-11-07 13:58:54 -08:00
Alex Jaramillo 5cbd31cbf2 Require explicit telemctl opt-in
telemetrics-client installation starts when the package is installed,
this change makes sure that to start telemetry the first time two steps
are needed: 1- telemctl opt-in and 2- telemctl start

Signed-off-by: Alex Jaramillo <alex.jch@gmail.com>
2019-10-14 11:02:20 -07:00
Juro Bystricky 4119bdea33 configure.ac: bump version to 2.2.3
Version bump to reflect changes in the package.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
v2.2.3
2019-10-08 09:53:02 -07:00
Juro Bystricky 2395f6bf3e python-probe.c: remove python probe
Remove all references to python probe. The python exceptions
are handled entirely in Python code. This telemetrics-client
package does not need to be aware of the Python code exception handling
and does not need to make any provisions for it (such as creating
services and directories).
It is the responsibility of Python exception handling to properly
interface with the telemetry library.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-10-08 09:52:35 -07:00
Tian Baofeng bc7e2610ee pstore_probe.c: add ramoops file support in pstore probe for cl telemetry
Add support for ramoops files in pstore probe, get the crash information
from "/sys/fs/pstore/dmesg-ramoops-x" files.
Add the "-f" cmd option support to input runtime config file when
running the probe.

Change-Id: Id7f26d6e07a7c215027b9be039356b2633d4869f
Signed-off-by: Tian Baofeng <baofeng.tian@intel.com>
2019-09-16 14:16:40 -07:00
Juro Bystricky a4774bde2e configure.ac: bump version to 2.2.2
Version bump from 2.2.1 to 2.2.2

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
v2.2.2
2019-09-03 09:52:20 -07:00
Juro Bystricky 63574e7406 crash_probe.c: improve error handling
Routine frame_cb: if asprintf fails, assume destination string
is not initialized properly.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-30 09:38:33 -07:00
Juro Bystricky ce35876b55 telemdaemon.c: sanity check for record size
handle_client: added a reasonable sanity check for record size.
Currently it is not possible to get max size of headers, so
the assumption is each line in header will be at most 80 chars.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-30 09:37:02 -07:00
Juro Bystricky 055e55b2f3 telemdaemon.c: modify handle_client
Split a fairly convoluted loop in "handle_client" into
two distinct steps:

1. Read the record size by reading the first 4 bytes.
2. Once the record size is known, read the rest of the record
   into a buffer.

All the buffer for the record allocation/deallocations are handled
in this routine as well. The new code does not need to know any datails
about the record buffer layout. This needed a minor modification of the
record itself, the first 4 bytes of the record now contain the length of
the entire record (including the 4 bytes). This required a minor change
in "telemtry.c" the routine tm_send_record. The previous "total_size"
in the 4 bytes did not include the terminator and header_size, so
"handle_client" needed to adjust for those to get the real expected
record size.

Also declared "terminate_client" and "process_record" as static.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-26 14:27:18 -07:00
Juro Bystricky 84b4266bc2 telempostdaemon.c: fix unitialized variable
Upon (error) exit the field buf.st_blocks may contain garbage.
Make sure buf.st_blocks is deterministic.
While in there, also removed some redundant round brackets.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-23 10:07:10 -07:00
Juro Bystricky e7d9d7b0ba telem_recoder_gen.c: remove redundant if statement
Removed the last error test from routine "instanciate_record".

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-23 09:17:59 -07:00
Juro Bystricky b0effc8850 telemctl.c: changed handling of opt_in/opt_out
Simplified the code for telemctl_opt_out and telemctl_opt_in.
There is no real need to call "access" to determine if opted_out
file exists, we get the same info by scrutinizing the errno.
This fixes any potential TOCTOU problems between access/create and access/unlink.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-22 14:57:35 -07:00
Alex Jaramillo e9ce8bc1ae Fix build warning not used variable 2019-08-22 14:57:19 -07:00
Alex Jaramillo ea1480fb04 Allow record creation on opt-out
When telemetry is opt-out, telem-record-gen is unable to print a
telemetry record. This change enables printing a record to stdout
without allowing the record to be submitted.

Signed-off-by: Alex Jaramillo <alex.jch@gmail.com>
2019-08-22 14:57:19 -07:00
Juro Bystricky a6e81aa3bb journal.c: fix some resource leaks
open_journal: Fix leaked file pointer on error exits.

print_journal: Make sure we always call free_journal_entry(entry),
regardless if we print the entry or not.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-22 09:12:10 -07:00
Juro Bystricky fffe9755ad journal.c: deserialize_journal_entry fixes
1. Return a known (NULL) value of "*entry" if the function fails.
2. Remove some dead code. Since the loop index ranges 0..4, it is
   pointless to have a switch statement outsized of this range.
3. Ensure all pointers within the allocated structure JournalEntry
   are defined. (They are initialized as NULL courtesy of calloc),
   otherwise we may end up freeing some random pointers in
   "free_journal_entry"

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-21 16:40:08 -07:00
Juro Bystricky b465d35b24 telemctl.c: avoid using fscanf
Don't use fscanf in order to avoid a potential string overflow.
Use code that is aware of allocated buffer sizes.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-21 09:41:07 -07:00
Juro Bystricky e2aeda86eb telem_record_gen.c: fix a potential resource leak
Routine "print_record": always call tm_free_record before
exiting the routine.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-21 09:40:55 -07:00
Juro Bystricky 6b4089075f telemctl.c: allow deleting of files not owned by telemetry
Folders owned by "telemetry" may contain files that are not
owned by "telemetry". Allow deleting those.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-20 15:08:39 -07:00
Juro Bystricky 83bb3df20a inifile.c: Check for NULL pointer
Don't assume calloc cannot fail, test the return value.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-20 15:08:25 -07:00
Juro Bystricky e855a19c88 oops_parser.c: remove needless check
Remove a test for a valid pointer. The test hase been done
already. Also the pointer has been dereferenced already.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-20 15:08:10 -07:00
Juro Bystricky 7173e1fede oops_parser.c: detect kernel panic
Add pattern for kernel panic. The new pattern can be tested with:

  $ sudo sh -c "echo 'c' > /proc/sysrq-trigger"

The above command will crash the system immediately, however upon reboot
the pstoreprobe will send the crah report.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-20 11:05:07 -07:00
Juro Bystricky a4bc8b55dd iorecord.c: fix a potential race
Prevent time of check to time of use exploit.
Don't use "stat" to get the file size. The "stat" and "fopen"
could refer to two different files.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-20 11:04:55 -07:00
Juro Bystricky d81ac1e8f3 telemctl.c: fix resource leak
Close a file descriptor for a freshly created & opened file
when not needed.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-20 11:04:38 -07:00
Juro Bystricky b0d448e9e7 telemetry.c: remove unneeded test
tm_set_event_id: if a record exists, then the record headers
array exists as well as it is a part of the record itself.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-19 09:29:18 -07:00
Juro Bystricky 88ee43f528 telempostdaemon.c: avoid freeing of uninitialized variables
"save_entry_to_journal": fix potential freeing of uninitilized
variables.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-19 09:22:08 -07:00
Juro Bystricky 49a1d41a3a telemdaemon.c: fix for a potential string overflow
In the routine "machine_id_replace" replace "strcpy" with
a safer "strncpy".
Also declare the routine as static as it is not used outside
of this file.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-19 09:21:54 -07:00
Juro Bystricky 0e20d62c9e oops_parser.c: remove unneeded check
Remove a useless test.
Routine "stack_frame_append": don't test again if a pointer
is NULL. It has been done already. Also, the pointer was
already dereferenced before the test.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-19 09:21:20 -07:00
Juro Bystricky d314c1a88b telemdaemon.c: properly handle mkstemp error
If mkstemp fails, it returns a negative value (-1).
So adjust the test accordingly. Also don't attempt to close
an invalid file descriptor. Don't unlink a file that failed
to be created.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-16 14:51:42 -07:00
Juro Bystricky b9ad4c2f14 telem_recorde_gen.c: fix potential memory leaks
It is allowed to enter the same command line argument more than once,
the later value overriding the previous one.
Make sure any previous value is properly de-allocated.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-16 13:48:53 -07:00
Juro Bystricky 9fd3c280ba telem_record_gen.c: return correct error in instanciate_record
In the routine "instanciate_record":
If the user passed event_id on the command line and it was incorrect,
any returned error from tm_set_event was ignored and "instanciate_record"
could return success (0).

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-16 13:48:39 -07:00
Juro Bystricky 75255fff50 telemdaemon.c: don't assume correct machine_id length
"fscanf" assumes an arbitrarily long string, so limit the scan to
32 characters to avoid a potential buffer overflow.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-16 13:48:25 -07:00
Juro Bystricky b2adc08d4f util.c: correct return value from "get_header_value"
Even if errors were encounterd parsing the header we used to
return success ("true") by a mistake.
Fix this by correcting the test.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-16 13:47:58 -07:00
Juro Bystricky e6357bb051 iorecord.c: fix memory allocation check
Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-16 10:42:11 -07:00
Mohammed Khajapasha 15b5df2f47 Fix double free in deserialize_journal_entry and print_journal
Causing double free case when an empty line has been
passed to deserialize_journal_entry() from print_journal()
to print the report, This case double free can be occured
at print_journal() and deserialize_journal_entry().

Signed-off-by: Mohammed Khajapasha <mohammed.khajapasha@intel.com>
2019-08-12 10:00:42 -07:00
Juro Bystricky f516d85e59 telemctl: binary version
Create a binary executable "telemctl" that is equivalent
to the shell script "telemctl".
Main reason is to make (future) localization easier.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-06 09:57:29 -07:00
Ammy Yi ce2ad0c2b0 Add "ACPI Error:" pattern for ACPI issues.
If "ACPI Error:" happen, it means there is kernel or bios issue.

Signed-off-by: Ammy Yi <ammy.yi@intel.com>
2019-08-06 09:51:54 -07:00
Juro Bystricky afb7572adf configure.ac: bump version to 2.2.1
Version bump from 2.2.0 to 2.2.1

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
v2.2.1
2019-08-02 15:05:03 -07:00
Juro Bystricky 3337c45b08 man pages: remove references to telemd
"telemd" was replaced by "telemprobd" a long time
ago, however several man pages still contain refererences
to "telemd".
This patch replaces all references accordingly.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-08-02 15:04:43 -07:00
Juro Bystricky 672e741e5d Fix build for logtype=systemd
Build is broken for multiple binaries when configured for logging
to systemd journal:

$ ./configure --enable-logtype=systemd
$ make

All binaries that use the routine "telem_log" must link to additional
libraries when logging to systemd journal.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-07-29 09:57:46 -07:00
Juro Bystricky e19e72a5b3 crash_probe: Limit the size of backtrace
A simple program that is highly recursive (or very deeply nested)
and causes stack overflow or segmentation fault can take hours
for crash_probe to process.
This patch fixes this by limiting the size of the stacktrace to 64.
(64 is also the size of the stack trace used by systemd).
64 lines of 80 characters == 5120 bytes. Enough to leave room for
telemetry headers and have a reasonable chance of making the 8k payload
limit.

If the stack trace is truncated, the payload will contain a message:

"Too many frames. Backtrace truncated".

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-07-25 08:40:04 -07:00
Juro Bystricky 9a25115d8e configure.ac: bump version to 2.2.0
Version bump from 2.1.1 to 2.2.0

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
v2.2.0
2019-07-09 09:36:31 -07:00
Juro Bystricky 11c5808fd9 telem_journal: improve usage message
No functional changes.
Provide additional info in the usage message, based on user feedback.
While in there, some additional minor changes..

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-06-12 10:42:33 -07:00
Juro Bystricky 9f67a1ca8a Updated AUTHORS
Added recent authors.
Also removed TODO, as it has not been maintained for several years.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-06-12 10:40:30 -07:00
Juro Bystricky 781d9382d0 Fix compiler warnings [-Wstringop-truncation]
Modify code to avoid generating compiler warning such as:
warning: ‘__builtin_strncpy’ output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation]

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-06-05 10:56:52 -07:00
Juro Bystricky 2a29191c5f telem_record_gen.c: fix for compiler warning [-Wstringop-overflow=]
Replace strncpy with memcpy to avoid GCC9 warning:
warning: ‘__builtin___strncpy_chk’ specified bound depends on the length of the source argument [-Wstringop-overflow=]

There is no danger of overflow. The destination buffer is guaranteed to
be of MAX_PAYLOAD_LENGTH.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-06-05 10:56:36 -07:00
Juro Bystricky c264cd044c check_probes.c: fix for compiler warning [-Wstringop-overflow=]
Replaced strncpy with memcpy and added some buffer overflow checks in
order to avoid GCC9 compiler warning:
warning: ‘__builtin___strncpy_chk’ specified bound depends on the length of the source argument [-Wstringop-overflow=]

While in there, removed one unused global variable and declared the remaining
global variables as static.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
2019-06-05 10:56:18 -07:00
California Sullivan ad4dde288b journal.c: reduce severity of message when failing to opening old records
The default configuration for telemetry is to not store records that
were successfully sent. This would result in a multitude of errors when
calling the journal program with --include_record, as the records no
longer existed to open.

Signed-off-by: California Sullivan <california.l.sullivan@intel.com>
2019-06-03 14:23:34 -07:00
Alex Jaramillo 48527a343b Protect security checks from removal
Compiler optimization can remove certain security checks for undefined
behavior. Add compiler flags that restrict arbitrary decisions when
handling undefined behaviors.

* fno-strict-overflow, do not assume signed overflow does not occur.
* fno-delete-null-pointer-checks, do not assume null pointer deference
does not exists.
* fwrapv, always wrap signed overflow.

Signed-off-by: Alex Jaramillo <alex.jch@gmail.com>
2019-05-30 11:02:44 -07:00
California Sullivan d13073ff25 src: standardize log and debug messages
Use the telem_log, telem_debug, and telem_perror macros to print
messages instead of printf and fprintf where appropriate. These macros
may be configured to print to many standard locations at compile time,
such as the syslog, the journal, or stderr. The remaining uses of
fprintf in printing errors is only for command line utilities.

When using telem_debug, we don't need to surround it with #ifdef DEBUG
statements, as the macro does that itself.

Finally, stop hiding real errors behind #ifdef DEBUGs. If an error
occurs, it should be logged.

Signed-off-by: California Sullivan <california.l.sullivan@intel.com>
2019-05-02 14:44:35 -07:00