Skip to content

Commit

Permalink
Merge pull request iovisor#1377 from palmtenor/ksym_segfault
Browse files Browse the repository at this point in the history
Avoid potential SEGFAULT when resolving Kernel symbols
  • Loading branch information
yonghong-song committed Oct 6, 2017
2 parents 2e20494 + 9c38f48 commit 66b8edd
Showing 1 changed file with 17 additions and 13 deletions.
30 changes: 17 additions & 13 deletions src/cc/bcc_syms.cc
Original file line number Diff line number Diff line change
Expand Up @@ -61,21 +61,25 @@ void KSyms::refresh() {
bool KSyms::resolve_addr(uint64_t addr, struct bcc_symbol *sym, bool demangle) {
refresh();

if (syms_.empty()) {
sym->name = nullptr;
sym->demangle_name = nullptr;
sym->module = nullptr;
sym->offset = 0x0;
return false;
std::vector<Symbol>::iterator it;

if (syms_.empty())
goto unknown_symbol;

it = std::upper_bound(syms_.begin(), syms_.end(), Symbol("", addr));
if (it != syms_.begin()) {
it--;
sym->name = (*it).name.c_str();
if (demangle)
sym->demangle_name = sym->name;
sym->module = "kernel";
sym->offset = addr - (*it).addr;
return true;
}

auto it = std::upper_bound(syms_.begin(), syms_.end(), Symbol("", addr)) - 1;
sym->name = (*it).name.c_str();
if (demangle)
sym->demangle_name = sym->name;
sym->module = "kernel";
sym->offset = addr - (*it).addr;
return true;
unknown_symbol:
memset(sym, 0, sizeof(struct bcc_symbol));
return false;
}

bool KSyms::resolve_name(const char *_unused, const char *name,
Expand Down

0 comments on commit 66b8edd

Please sign in to comment.