Re: What happens to a uprobe if it links to a library within a container, and that container gets deleted?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jul 7, 2022 at 12:05 PM Yadunandan Pillai <thesw4rm@xxxxx> wrote:
>
> How are uprobes "remembered" in the kernel from a conceptual standpoint? Where is the attach point stored? Is it basically a hashmap with JMP instructions for each function that is being attached to? What exactly does the cleanup process look like if the attach point disappears?
>
> Example of a use case: let's say a uprobe is to "SSL_read" in /proc/[root_pid]/root/.../libssl.so where [root_pid] is the root process of a container. If the container dies, then does that uprobe hang around attaching to empty air or gets deleted as well?

In BPF world, uprobe is a combination of two objects, each having
their FD and associated lifetimes:
  - perf_event_open() syscall creates perf_event kernel object that
represents uprobe itself (you specify target binary, which kernel
resolves into inode internally; optionally you also specify PID
filter, so uprobe can be triggered only for specific process or for
all processes that run code from specified binary);
  - uprobe BPF program attached to perf_event object; this attachment
(link) also has associated FD (for older kernels you'll have only
perf_event FD, though);

As long as at least one of those FDs are not closed, your uprobe+BPF
program will be active. They might not be triggered ever because file
was deleted from file system (I think file's inode will be kept around
until perf_event is destroyed, but I haven't checked the code).

So direct answer to your last question depends on what happens with
perf_event that was created during attachment. If its FD survives the
container (because you transferred FD, or the process is outside of
container, or you pinned BPF link representing that attachment), then
no, uprobe is still there. But if the process that attached BPF
program exits and nothing else keeps FD alive, then BPF program and
perf_event will be detached and destroyed.

>
> Yadunandan Pillai




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux