mirror of
https://github.com/netdata/libbpf.git
synced 2026-03-26 03:09:07 +08:00
Compare commits
4 Commits
v1.2.1.p_n
...
v1.2.2p_ne
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
360a2fd909 | ||
|
|
05f94ddbb8 | ||
|
|
bf88aaa6fe | ||
|
|
f117080307 |
@@ -1 +1 @@
|
|||||||
c628747cc8800cf6d33d09f7f42c8b6f91e64dc7
|
a3e7e6b17946f48badce98d7ac360678a0ea7393
|
||||||
|
|||||||
@@ -80,16 +80,6 @@ struct hashmap {
|
|||||||
size_t sz;
|
size_t sz;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define HASHMAP_INIT(hash_fn, equal_fn, ctx) { \
|
|
||||||
.hash_fn = (hash_fn), \
|
|
||||||
.equal_fn = (equal_fn), \
|
|
||||||
.ctx = (ctx), \
|
|
||||||
.buckets = NULL, \
|
|
||||||
.cap = 0, \
|
|
||||||
.cap_bits = 0, \
|
|
||||||
.sz = 0, \
|
|
||||||
}
|
|
||||||
|
|
||||||
void hashmap__init(struct hashmap *map, hashmap_hash_fn hash_fn,
|
void hashmap__init(struct hashmap *map, hashmap_hash_fn hash_fn,
|
||||||
hashmap_equal_fn equal_fn, void *ctx);
|
hashmap_equal_fn equal_fn, void *ctx);
|
||||||
struct hashmap *hashmap__new(hashmap_hash_fn hash_fn,
|
struct hashmap *hashmap__new(hashmap_hash_fn hash_fn,
|
||||||
|
|||||||
15
src/libbpf.c
15
src/libbpf.c
@@ -6161,7 +6161,11 @@ static int append_subprog_relos(struct bpf_program *main_prog, struct bpf_progra
|
|||||||
if (main_prog == subprog)
|
if (main_prog == subprog)
|
||||||
return 0;
|
return 0;
|
||||||
relos = libbpf_reallocarray(main_prog->reloc_desc, new_cnt, sizeof(*relos));
|
relos = libbpf_reallocarray(main_prog->reloc_desc, new_cnt, sizeof(*relos));
|
||||||
if (!relos)
|
/* if new count is zero, reallocarray can return a valid NULL result;
|
||||||
|
* in this case the previous pointer will be freed, so we *have to*
|
||||||
|
* reassign old pointer to the new value (even if it's NULL)
|
||||||
|
*/
|
||||||
|
if (!relos && new_cnt)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
if (subprog->nr_reloc)
|
if (subprog->nr_reloc)
|
||||||
memcpy(relos + main_prog->nr_reloc, subprog->reloc_desc,
|
memcpy(relos + main_prog->nr_reloc, subprog->reloc_desc,
|
||||||
@@ -8532,7 +8536,8 @@ int bpf_program__set_insns(struct bpf_program *prog,
|
|||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
insns = libbpf_reallocarray(prog->insns, new_insn_cnt, sizeof(*insns));
|
insns = libbpf_reallocarray(prog->insns, new_insn_cnt, sizeof(*insns));
|
||||||
if (!insns) {
|
/* NULL is a valid return from reallocarray if the new count is zero */
|
||||||
|
if (!insns && new_insn_cnt) {
|
||||||
pr_warn("prog '%s': failed to realloc prog code\n", prog->name);
|
pr_warn("prog '%s': failed to realloc prog code\n", prog->name);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
@@ -8841,7 +8846,11 @@ int libbpf_unregister_prog_handler(int handler_id)
|
|||||||
|
|
||||||
/* try to shrink the array, but it's ok if we couldn't */
|
/* try to shrink the array, but it's ok if we couldn't */
|
||||||
sec_defs = libbpf_reallocarray(custom_sec_defs, custom_sec_def_cnt, sizeof(*sec_defs));
|
sec_defs = libbpf_reallocarray(custom_sec_defs, custom_sec_def_cnt, sizeof(*sec_defs));
|
||||||
if (sec_defs)
|
/* if new count is zero, reallocarray can return a valid NULL result;
|
||||||
|
* in this case the previous pointer will be freed, so we *have to*
|
||||||
|
* reassign old pointer to the new value (even if it's NULL)
|
||||||
|
*/
|
||||||
|
if (sec_defs || custom_sec_def_cnt == 0)
|
||||||
custom_sec_defs = sec_defs;
|
custom_sec_defs = sec_defs;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -852,8 +852,11 @@ static int bpf_link_usdt_detach(struct bpf_link *link)
|
|||||||
* system is so exhausted on memory, it's the least of user's
|
* system is so exhausted on memory, it's the least of user's
|
||||||
* concerns, probably.
|
* concerns, probably.
|
||||||
* So just do our best here to return those IDs to usdt_manager.
|
* So just do our best here to return those IDs to usdt_manager.
|
||||||
|
* Another edge case when we can legitimately get NULL is when
|
||||||
|
* new_cnt is zero, which can happen in some edge cases, so we
|
||||||
|
* need to be careful about that.
|
||||||
*/
|
*/
|
||||||
if (new_free_ids) {
|
if (new_free_ids || new_cnt == 0) {
|
||||||
memcpy(new_free_ids + man->free_spec_cnt, usdt_link->spec_ids,
|
memcpy(new_free_ids + man->free_spec_cnt, usdt_link->spec_ids,
|
||||||
usdt_link->spec_cnt * sizeof(*usdt_link->spec_ids));
|
usdt_link->spec_cnt * sizeof(*usdt_link->spec_ids));
|
||||||
man->free_spec_ids = new_free_ids;
|
man->free_spec_ids = new_free_ids;
|
||||||
|
|||||||
Reference in New Issue
Block a user