{
        const struct bpf_core_accessor *acc;
        const struct btf_type *t;
-       __u32 byte_off, byte_sz, bit_off, bit_sz, field_type_id;
+       __u32 byte_off, byte_sz, bit_off, bit_sz, field_type_id, elem_id;
        const struct btf_member *m;
        const struct btf_type *mt;
        bool bitfield;
        if (!acc->name) {
                if (relo->kind == BPF_CORE_FIELD_BYTE_OFFSET) {
                        *val = spec->bit_offset / 8;
-                       /* remember field size for load/store mem size */
-                       sz = btf__resolve_size(spec->btf, acc->type_id);
+                       /* remember field size for load/store mem size;
+                        * note, for arrays we care about individual element
+                        * sizes, not the overall array size
+                        */
+                       t = skip_mods_and_typedefs(spec->btf, acc->type_id, &elem_id);
+                       while (btf_is_array(t))
+                               t = skip_mods_and_typedefs(spec->btf, btf_array(t)->type, &elem_id);
+                       sz = btf__resolve_size(spec->btf, elem_id);
                        if (sz < 0)
                                return -EINVAL;
                        *field_sz = sz;
        case BPF_CORE_FIELD_BYTE_OFFSET:
                *val = byte_off;
                if (!bitfield) {
-                       *field_sz = byte_sz;
+                       /* remember field size for load/store mem size;
+                        * note, for arrays we care about individual element
+                        * sizes, not the overall array size
+                        */
+                       t = skip_mods_and_typedefs(spec->btf, field_type_id, &elem_id);
+                       while (btf_is_array(t))
+                               t = skip_mods_and_typedefs(spec->btf, btf_array(t)->type, &elem_id);
+                       sz = btf__resolve_size(spec->btf, elem_id);
+                       if (sz < 0)
+                               return -EINVAL;
+                       *field_sz = sz;
                        *type_id = field_type_id;
                }
                break;