cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

trace_printk.c (1707B)


      1// SPDX-License-Identifier: GPL-2.0
      2/* Copyright (c) 2020, Oracle and/or its affiliates. */
      3
      4#include <test_progs.h>
      5
      6#include "trace_printk.lskel.h"
      7
      8#define TRACEBUF	"/sys/kernel/debug/tracing/trace_pipe"
      9#define SEARCHMSG	"testing,testing"
     10
     11void serial_test_trace_printk(void)
     12{
     13	struct trace_printk_lskel__bss *bss;
     14	int err = 0, iter = 0, found = 0;
     15	struct trace_printk_lskel *skel;
     16	char *buf = NULL;
     17	FILE *fp = NULL;
     18	size_t buflen;
     19
     20	skel = trace_printk_lskel__open();
     21	if (!ASSERT_OK_PTR(skel, "trace_printk__open"))
     22		return;
     23
     24	ASSERT_EQ(skel->rodata->fmt[0], 'T', "skel->rodata->fmt[0]");
     25	skel->rodata->fmt[0] = 't';
     26
     27	err = trace_printk_lskel__load(skel);
     28	if (!ASSERT_OK(err, "trace_printk__load"))
     29		goto cleanup;
     30
     31	bss = skel->bss;
     32
     33	err = trace_printk_lskel__attach(skel);
     34	if (!ASSERT_OK(err, "trace_printk__attach"))
     35		goto cleanup;
     36
     37	fp = fopen(TRACEBUF, "r");
     38	if (!ASSERT_OK_PTR(fp, "fopen(TRACEBUF)"))
     39		goto cleanup;
     40
     41	/* We do not want to wait forever if this test fails... */
     42	fcntl(fileno(fp), F_SETFL, O_NONBLOCK);
     43
     44	/* wait for tracepoint to trigger */
     45	usleep(1);
     46	trace_printk_lskel__detach(skel);
     47
     48	if (!ASSERT_GT(bss->trace_printk_ran, 0, "bss->trace_printk_ran"))
     49		goto cleanup;
     50
     51	if (!ASSERT_GT(bss->trace_printk_ret, 0, "bss->trace_printk_ret"))
     52		goto cleanup;
     53
     54	/* verify our search string is in the trace buffer */
     55	while (getline(&buf, &buflen, fp) >= 0 || errno == EAGAIN) {
     56		if (strstr(buf, SEARCHMSG) != NULL)
     57			found++;
     58		if (found == bss->trace_printk_ran)
     59			break;
     60		if (++iter > 1000)
     61			break;
     62	}
     63
     64	if (!ASSERT_EQ(found, bss->trace_printk_ran, "found"))
     65		goto cleanup;
     66
     67cleanup:
     68	trace_printk_lskel__destroy(skel);
     69	free(buf);
     70	if (fp)
     71		fclose(fp);
     72}