BPF_READ
return type == BPF_READ && off == 0 && size == sizeof(u32);
if (type != BPF_READ)
if (type != BPF_READ)
if (type == BPF_READ) {
err = check_helper_mem_access(env, regno, key_size, BPF_READ, false, NULL);
arg_type & MEM_WRITE ? BPF_WRITE : BPF_READ,
arg_type & MEM_WRITE ? BPF_WRITE : BPF_READ,
BPF_WRITE : BPF_READ,
BPF_WRITE : BPF_READ,
type = BPF_READ;
if (type == BPF_READ) {
false, BPF_READ, NULL);
if (type == BPF_READ && !(cap & BPF_MAP_CAN_READ)) {
if (atype != BPF_READ && !type_is_ptr_alloc_obj(reg->type)) {
if (atype == BPF_READ && value_regno >= 0) {
if (atype != BPF_READ) {
if (type == BPF_READ)
} else if (t == BPF_READ && value_regno >= 0) {
if (!err && value_regno >= 0 && (t == BPF_READ || rdonly_mem))
if (!err && t == BPF_READ && value_regno >= 0) {
if (t == BPF_READ)
if (!err && t == BPF_READ && value_regno >= 0)
if (!err && t == BPF_READ && value_regno >= 0)
if (!err && t == BPF_READ && value_regno >= 0)
if (!err && value_regno >= 0 && (rdonly_mem || t == BPF_READ))
if (t == BPF_READ && value_regno >= 0)
if (!err && size < BPF_REG_SIZE && value_regno >= 0 && t == BPF_READ &&
BPF_SIZE(insn->code), BPF_READ, insn->dst_reg,
BPF_SIZE(insn->code), BPF_READ, -1, true, false);
BPF_READ, load_reg, true, false);
access_size, BPF_READ, -1);
err = check_helper_mem_access(env, regno, mem_size, BPF_READ, true, NULL);
err = check_mem_size_reg(env, reg, regno, BPF_READ, true, &meta);
!may_access_direct_pkt_data(env, meta, BPF_READ)) {
if (type != BPF_READ)
if (type != BPF_READ)
if (size != sizeof(u64) || type != BPF_READ)
if (type != BPF_READ)
off % size || type != BPF_READ)
if (type != BPF_READ)
return access_type == BPF_READ;
if (type == BPF_READ) {
if (type != BPF_READ)
if (type != BPF_READ)
if (arg == 2 && type == BPF_READ) {