Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/tools/testing/selftests/bpf/progs/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 3 kB image not shown  

Quelle  test_varlen.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/* Copyright (c) 2020 Facebook */

#include "vmlinux.h"
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>
#include <bpf/bpf_core_read.h>

#define MAX_LEN 256

char buf_in1[MAX_LEN] = {};
char buf_in2[MAX_LEN] = {};

int test_pid = 0;
bool capture = false;

/* .bss */
__u64 payload1_len1 = 0;
__u64 payload1_len2 = 0;
__u64 total1 = 0;
char payload1[MAX_LEN + MAX_LEN] = {};
__u64 ret_bad_read = 0;

/* .data */
int payload2_len1 = -1;
int payload2_len2 = -1;
int total2 = -1;
char payload2[MAX_LEN + MAX_LEN] = { 1 };

int payload3_len1 = -1;
int payload3_len2 = -1;
int total3= -1;
char payload3[MAX_LEN + MAX_LEN] = { 1 };

int payload4_len1 = -1;
int payload4_len2 = -1;
int total4= -1;
char payload4[MAX_LEN + MAX_LEN] = { 1 };

char payload_bad[5] = { 0x42, 0x42, 0x42, 0x42, 0x42 };

SEC("raw_tp/sys_enter")
int handler64_unsigned(void *regs)
{
 int pid = bpf_get_current_pid_tgid() >> 32;
 void *payload = payload1;
 long len;

 /* ignore irrelevant invocations */
 if (test_pid != pid || !capture)
  return 0;

 len = bpf_probe_read_kernel_str(payload, MAX_LEN, &buf_in1[0]);
 if (len >= 0) {
  payload += len;
  payload1_len1 = len;
 }

 len = bpf_probe_read_kernel_str(payload, MAX_LEN, &buf_in2[0]);
 if (len >= 0) {
  payload += len;
  payload1_len2 = len;
 }

 total1 = payload - (void *)payload1;

 ret_bad_read = bpf_probe_read_kernel_str(payload_bad + 2, 1, (void *) -1);

 return 0;
}

SEC("raw_tp/sys_exit")
int handler64_signed(void *regs)
{
 int pid = bpf_get_current_pid_tgid() >> 32;
 void *payload = payload3;
 long len;

 /* ignore irrelevant invocations */
 if (test_pid != pid || !capture)
  return 0;

 len = bpf_probe_read_kernel_str(payload, MAX_LEN, &buf_in1[0]);
 if (len >= 0) {
  payload += len;
  payload3_len1 = len;
 }
 len = bpf_probe_read_kernel_str(payload, MAX_LEN, &buf_in2[0]);
 if (len >= 0) {
  payload += len;
  payload3_len2 = len;
 }
 total3 = payload - (void *)payload3;

 return 0;
}

SEC("tp/raw_syscalls/sys_enter")
int handler32_unsigned(void *regs)
{
 int pid = bpf_get_current_pid_tgid() >> 32;
 void *payload = payload2;
 u32 len;

 /* ignore irrelevant invocations */
 if (test_pid != pid || !capture)
  return 0;

 len = bpf_probe_read_kernel_str(payload, MAX_LEN, &buf_in1[0]);
 if (len <= MAX_LEN) {
  payload += len;
  payload2_len1 = len;
 }

 len = bpf_probe_read_kernel_str(payload, MAX_LEN, &buf_in2[0]);
 if (len <= MAX_LEN) {
  payload += len;
  payload2_len2 = len;
 }

 total2 = payload - (void *)payload2;

 return 0;
}

SEC("tp/raw_syscalls/sys_exit")
int handler32_signed(void *regs)
{
 int pid = bpf_get_current_pid_tgid() >> 32;
 void *payload = payload4;
 long len;

 /* ignore irrelevant invocations */
 if (test_pid != pid || !capture)
  return 0;

 len = bpf_probe_read_kernel_str(payload, MAX_LEN, &buf_in1[0]);
 if (len >= 0) {
  payload += len;
  payload4_len1 = len;
 }
 len = bpf_probe_read_kernel_str(payload, MAX_LEN, &buf_in2[0]);
 if (len >= 0) {
  payload += len;
  payload4_len2 = len;
 }
 total4 = payload - (void *)payload4;

 return 0;
}

SEC("tp/syscalls/sys_exit_getpid")
int handler_exit(void *regs)
{
 long bla;

 if (bpf_probe_read_kernel(&bla, sizeof(bla), 0))
  return 1;
 else
  return 0;
}

char LICENSE[] SEC("license") = "GPL";

Messung V0.5
C=96 H=100 G=97

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.