Git Product home page Git Product logo

Comments (3)

bitness avatar bitness commented on June 10, 2024

Sorry for posting in an old, closed issue, but is it possible this is broken again? I'm unable to get a program that does the following to load through cilium/ebpf v0.10.0, though it works fine with libbpf:

static inline struct nfs_inode* NFS_I(const struct inode* inode)
{
    return container_of(inode, struct nfs_inode, vfs_inode);
}

SEC("fexit/nfs_rmdir")
int BPF_PROG(nfs_rmdir, struct inode* dir, struct dentry* dentry, int ret)
{
    struct nfs_inode* nfsi = NFS_I(dir);
    ....
}

The error I get when trying to load this with cilium/ebpf is:

verifier error: load program: invalid argument:
        func#0 @0
        R1 type=ctx expected=fp
        0: R1=ctx(id=0,off=0,imm=0) R10=fp0
        ; int BPF_PROG(nfs_rmdir, struct inode* dir, struct dentry* dentry, int ret)
        0: (85) call unknown#195896080
        invalid func unknown#195896080
        processed 1 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0

Thanks!

from ebpf.

ti-mo avatar ti-mo commented on June 10, 2024

What's container_of? NFS_I gets inlined, so that's not going to emit a bpf2bpf call. Please open an issue with a reproducer. 🙏

from ebpf.

bitness avatar bitness commented on June 10, 2024

container_of is a macro from the kernel that lets you get the pointer to a struct that contains a pointer that you have:

#ifndef offsetof
#define offsetof(TYPE, MEMBER)  ((unsigned long)&((TYPE *)0)->MEMBER)
#endif
#ifndef container_of
#define container_of(ptr, type, member)                         \
        ({                                                      \
                void *__mptr = (void *)(ptr);                   \
                ((type *)(__mptr - offsetof(type, member)));    \
        })
#endif

In the code I posted above, it's saying, "I have a struct inode* that I know is the vfs_inode field in a struct nfs_inode. Please give me a pointer to that struct nfs_inode".

I'll open an issue. Thanks for the fast response!

from ebpf.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.