public inbox for bpf@vger.kernel.org
 help / color / mirror / Atom feed
From: Victor Laforet <victor.laforet@ip-paris.fr>
To: bpf@vger.kernel.org
Subject: bpf_probe_read_user EFAULT
Date: Tue, 27 Dec 2022 15:56:06 +0100 (CET)	[thread overview]
Message-ID: <346230382.476954.1672152966557.JavaMail.zimbra@ip-paris.fr> (raw)

Hi all,

I am trying to use bpf_probe_read_user to read a user space value from BPF. The issue is that I am getting -14 (-EFAULT) result from bpf_probe_read_user. I haven’t been able to make this function work reliably. Sometimes I get no error code then it goes back to EFAULT.

I am seeking your help to try and make this code work.
Thank you!

My goal is to read the variable pid on every bpf event.
Here is a full example:
(cat /sys/kernel/debug/tracing/trace_pipe to read the output).

sched_switch.bpf.c
```
#include "vmlinux.h"
#include <bpf/bpf_helpers.h>

int *input_pid;

char _license[4] SEC("license") = "GPL";

SEC("tp_btf/sched_switch")
int handle_sched_switch(u64 *ctx)
{
  int pid;
  int err;

  err = bpf_probe_read_user(&pid, sizeof(int), (void *)input_pid);
  if (err != 0)
  {
    bpf_printk("Error on bpf_probe_read_user(pid) -> %d.\n", err);
    return 0;
  }

  bpf_printk("pid %d.\n", pid);
  return 0;
}
```

sched_switch.c
```
#include <stdio.h>
#include <unistd.h>
#include <sys/resource.h>
#include <bpf/libbpf.h>
#include "sched_switch.skel.h"
#include <time.h>

static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
{
  return vfprintf(stderr, format, args);
}

int main(int argc, char **argv)
{
  struct sched_switch_bpf *skel;
  int err;
  int pid = getpid();

  libbpf_set_print(libbpf_print_fn);

  skel = sched_switch_bpf__open();
  if (!skel)
  {
    fprintf(stderr, "Failed to open BPF skeleton\n");
    return 1;
  }

  skel->bss->input_pid = &pid;

  err = sched_switch_bpf__load(skel);
  if (err)
  {
    fprintf(stderr, "Failed to load and verify BPF skeleton\n");
    goto cleanup;
  }

  err = sched_switch_bpf__attach(skel);
  if (err)
  {
    fprintf(stderr, "Failed to attach BPF skeleton\n");
    goto cleanup;
  }

  while (1);

cleanup:
  sched_switch_bpf__destroy(skel);
  return -err;
}
```

             reply	other threads:[~2022-12-27 14:56 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-27 14:56 Victor Laforet [this message]
2022-12-27 16:00 ` bpf_probe_read_user EFAULT Jiri Olsa
2022-12-28 14:00   ` Victor Laforet
2022-12-28 19:41     ` Yonghong Song
2023-01-02 22:10       ` Victor Laforet
     [not found]       ` <5692f180-5b78-48e0-b974-b60bd58c0839@Spark>
2023-01-03  8:03         ` Jiri Olsa
2023-01-04 15:24           ` Victor Laforet
2023-01-04 21:41             ` Jiri Olsa
2023-01-04 22:08               ` Jiri Olsa
2023-01-05  9:47                 ` Jiri Olsa
2023-01-06  3:26                   ` Alexei Starovoitov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=346230382.476954.1672152966557.JavaMail.zimbra@ip-paris.fr \
    --to=victor.laforet@ip-paris.fr \
    --cc=bpf@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox