On Tue, Feb 21, 2017 at 02:00:13PM +0100, Jesper Dangaard Brouer wrote: > On Tue, 21 Feb 2017 00:06:11 -0800 > Alexei Starovoitov <alexei.starovoi...@gmail.com> wrote: > > > On Mon, Feb 20, 2017 at 05:25:58PM +0100, Jesper Dangaard Brouer wrote: > > > On Mon, 20 Feb 2017 16:57:34 +0100 > > > Daniel Borkmann <dan...@iogearbox.net> wrote: > > > > > > > On 02/20/2017 04:35 PM, Jesper Dangaard Brouer wrote: > > > > > It is confusing users of samples/bpf that exceeding the resource > > > > > limits for RLIMIT_MEMLOCK result in an "Operation not permitted" > > > > > message. This is due to bpf limits check return -EPERM. > > > > > > > > > > Instead return -ENOMEM, like most other users of this API. > > > > > > > > > > Fixes: aaac3ba95e4c ("bpf: charge user for creation of BPF maps and > > > > > programs") > > > > > Fixes: 6c9059817432 ("bpf: pre-allocate hash map elements") > > > > > Fixes: 5ccb071e97fb ("bpf: fix overflow in prog accounting") > > > > > > > > Btw, last one just moves the helper so fixes doesn't really apply > > > > there, but apart from that this is already uapi exposed behavior > > > > like this for ~1.5yrs, so unfortunately too late to change now. I > > > > think the original intention (arguably confusing in this context) > > > > was that user doesn't have (rlimit) permission to allocate this > > > > resource. > > > > > > This is obviously confusing end-users, thus it should be fixed IMHO. > > > > I don't think it's confusing and I think EPERM makes > > the most sense as return code in such situation. > > Most other kernel users return ENOMEM.
the places in the kernel that check for memlock are not fully consistent. perf does this: lock_limit = rlimit(RLIMIT_MEMLOCK); lock_limit >>= PAGE_SHIFT; locked = vma->vm_mm->pinned_vm + extra; if ((locked > lock_limit) && perf_paranoid_tracepoint_raw() && !capable(CAP_IPC_LOCK)) { ret = -EPERM; goto unlock; } and in bpf land we got an idea of using memlock limit from perf. > Documented it here: > https://prototype-kernel.readthedocs.io/en/latest/bpf/troubleshooting.html Thanks! Looks good.