void socket_setsockopt(struct sockopt *so, __unused__ struct socket_triplet *triplet) { so->level = SOL_SOCKET; so->optname = RAND_ARRAY(socket_opts); /* Adjust length according to operation set. */ switch (so->optname) { case SO_LINGER: so->optlen = sizeof(struct linger); break; case SO_RCVTIMEO: case SO_SNDTIMEO: so->optlen = sizeof(struct timeval); break; case SO_ATTACH_FILTER: { unsigned long *optval = NULL, optlen = 0; bpf_gen_filter(&optval, &optlen); so->optval = (unsigned long) optval; so->optlen = optlen; break; } default: break; } }
static void bpf_prog_load(union bpf_attr *attr) { unsigned long *insns = NULL, len = 0; attr->prog_type = RAND_ARRAY(bpf_prog_types); switch (attr->prog_type) { case BPF_PROG_TYPE_SOCKET_FILTER: bpf_gen_filter(&insns, &len); break; default: // this will go away when all the other cases are enumerated insns = zmalloc(page_size); generate_rand_bytes((unsigned char *)insns, len); break; } attr->insn_cnt = len; attr->insns = (u64) insns; attr->license = (u64) license; attr->log_level = 0; attr->log_size = rnd() % page_size; attr->log_buf = (u64) get_writable_address(page_size); attr->kern_version = rnd(); // TODO: stick uname in here. }