On Tue, Jun 21, 2022 at 8:27 PM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > [...] > > Sorry for not seeing it before, I think this i++ is incorrect. It is skipping > over the next argument. Which means mem, len pair is not being seen, otherwise > it should have given an error with the void * argument, because the next > argument does not have __sz prefix, so there is no mem, len pair in the kfunc > args. > > The i++ is done for arg_mem_size case because we processed both argno and argno + 1 > together, so the next size arg doesn't need to be processed. > > So the bpf_getxattr declaration needs to change from: > > noinline __weak ssize_t bpf_getxattr(struct dentry *dentry, struct inode *inode, > const char *name, void *value, int size) > > to > > noinline __weak ssize_t bpf_getxattr(struct dentry *dentry, struct inode *inode, > const char *name, void *value, int value__sz) > > You only need the __sz suffix, the part before that is your choice. > Then it will actually check the size for the value pointer. > Also, I think neither noinline nor __weak are needed. > So, yes, I thought about this and you are right, noinline and __weak are indeed not needed. The compiler will inline the call sites. But there are no call sites to be inlined in the kernel. So, we are good with just silencing the compiler warnings