BEGIN_BPF_CMD_DECODER(BPF_PROG_QUERY)
{
- uint64_t prog_id_buf;
+ uint32_t prog_id_buf;
if (entering(tcp)) {
PRINT_FIELD_FD("{query={", attr, target_fd, tcp);
return 0;
}
- /*
- * The issue here is that we can't pass pointers bigger than
- * (our) kernel long ti print_array, so we opt out from decoding
- * the array.
- */
- if (syserror(tcp) || attr.prog_ids > max_kaddr())
- printaddr64(attr.prog_ids);
- else
- print_array(tcp, attr.prog_ids, attr.prog_cnt, &prog_id_buf,
- sizeof(prog_id_buf), umoven_or_printaddr,
- print_uint64_array_member, 0);
+ print_big_u64_addr(attr.prog_ids);
+ print_array(tcp, attr.prog_ids, attr.prog_cnt, &prog_id_buf,
+ sizeof(prog_id_buf), umoven_or_printaddr,
+ print_uint32_array_member, 0);
tprints(", prog_cnt=");
if (priv && priv->bpf_prog_query_stored
#if defined MPERS_IS_m32 || SIZEOF_KERNEL_LONG_T > 4
# define BIG_ADDR(addr64_, addr32_) addr64_
+# define BIG_ADDR_MAYBE(addr_)
#elif defined __arm__ || defined __i386__ || defined __mips__ \
|| defined __powerpc__ || defined __riscv__ || defined __s390__ \
|| defined __sparc__ || defined __tile__
# define BIG_ADDR(addr64_, addr32_) addr64_ " or " addr32_
+# define BIG_ADDR_MAYBE(addr_) addr_ " or "
#else
# define BIG_ADDR(addr64_, addr32_) addr32_
+# define BIG_ADDR_MAYBE(addr_)
#endif
#ifndef HAVE_STRUCT_BPF_INSN
", attach_type=0xe /* BPF_??? */"
", query_flags=0xfffffffe /* BPF_F_QUERY_??? */"
", attach_flags=0xfffffffc /* BPF_F_??? */"
- ", prog_ids=0xffffffffffffffff, prog_cnt=2718281828}",
+ ", prog_ids="
+ BIG_ADDR("0xffffffffffffffff", "0xffffffff")
+ ", prog_cnt=2718281828}",
},
{ /* 3 */
.data = { .BPF_PROG_QUERY_data = {
", attach_type=0xfeedface /* BPF_??? */"
", query_flags=BPF_F_QUERY_EFFECTIVE|0xdeadf00c"
", attach_flags=BPF_F_ALLOW_MULTI|0xbeefcafc"
- ", prog_ids=0xffffffffffffffff, prog_cnt=0}",
+ ", prog_ids=" BIG_ADDR_MAYBE("0xffffffffffffffff") "[]"
+ ", prog_cnt=0}",
},
};