for (i = 0; i < refs->ref_cnt; i++) { if (refs->refs[i].pid == e->pid) return;
}
tmp = realloc(refs->refs, (refs->ref_cnt + 1) * sizeof(*ref)); if (!tmp) {
p_err("failed to re-alloc memory for ID %u, PID %d, COMM %s...",
e->id, e->pid, e->comm); return;
}
refs->refs = tmp;
ref = &refs->refs[refs->ref_cnt];
ref->pid = e->pid;
memcpy(ref->comm, e->comm, sizeof(ref->comm));
ref->comm[sizeof(ref->comm) - 1] = '\0';
refs->ref_cnt++;
return;
}
/* new ref */
refs = calloc(1, sizeof(*refs)); if (!refs) {
p_err("failed to alloc memory for ID %u, PID %d, COMM %s...",
e->id, e->pid, e->comm); return;
}
refs->refs = malloc(sizeof(*refs->refs)); if (!refs->refs) {
free(refs);
p_err("failed to alloc memory for ID %u, PID %d, COMM %s...",
e->id, e->pid, e->comm); return;
}
ref = &refs->refs[0];
ref->pid = e->pid;
memcpy(ref->comm, e->comm, sizeof(ref->comm));
ref->comm[sizeof(ref->comm) - 1] = '\0';
refs->ref_cnt = 1;
refs->has_bpf_cookie = e->has_bpf_cookie;
refs->bpf_cookie = e->bpf_cookie;
err = hashmap__append(map, e->id, refs); if (err)
p_err("failed to append entry to hashmap for ID %u: %s",
e->id, strerror(errno));
}
*map = hashmap__new(hash_fn_for_key_as_id, equal_fn_for_key_as_id, NULL); if (IS_ERR(*map)) {
p_err("failed to create hashmap for PID references"); return -1;
}
set_max_rlimit();
skel = pid_iter_bpf__open(); if (!skel) {
p_err("failed to open PID iterator skeleton"); return -1;
}
skel->rodata->obj_type = type;
if (!verifier_logs) {
libbpf_print_fn_t default_print;
/* Unless debug information is on, we don't want the output to * be polluted with libbpf errors if bpf_iter is not supported.
*/
default_print = libbpf_set_print(libbpf_print_none);
err = pid_iter_bpf__load(skel);
libbpf_set_print(default_print);
} else {
err = pid_iter_bpf__load(skel);
} if (err) { /* too bad, kernel doesn't support BPF iterators yet */
err = 0; goto out;
}
err = pid_iter_bpf__attach(skel); if (err) { /* if we loaded above successfully, attach has to succeed */
p_err("failed to attach PID iterator: %d", err); goto out;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.