diff options
| -rw-r--r-- | kernel/kallsyms.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c index a23e21ada81b..aa31aa07f2ef 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c | |||
| @@ -506,27 +506,24 @@ static void reset_iter(struct kallsym_iter *iter, loff_t new_pos) | |||
| 506 | } | 506 | } |
| 507 | } | 507 | } |
| 508 | 508 | ||
| 509 | /* | ||
| 510 | * The end position (last + 1) of each additional kallsyms section is recorded | ||
| 511 | * in iter->pos_..._end as each section is added, and so can be used to | ||
| 512 | * determine which get_ksymbol_...() function to call next. | ||
| 513 | */ | ||
| 509 | static int update_iter_mod(struct kallsym_iter *iter, loff_t pos) | 514 | static int update_iter_mod(struct kallsym_iter *iter, loff_t pos) |
| 510 | { | 515 | { |
| 511 | iter->pos = pos; | 516 | iter->pos = pos; |
| 512 | 517 | ||
| 513 | if (iter->pos_ftrace_mod_end > 0 && | 518 | if ((!iter->pos_mod_end || iter->pos_mod_end > pos) && |
| 514 | iter->pos_ftrace_mod_end < iter->pos) | 519 | get_ksymbol_mod(iter)) |
| 515 | return get_ksymbol_bpf(iter); | ||
| 516 | |||
| 517 | if (iter->pos_mod_end > 0 && | ||
| 518 | iter->pos_mod_end < iter->pos) { | ||
| 519 | if (!get_ksymbol_ftrace_mod(iter)) | ||
| 520 | return get_ksymbol_bpf(iter); | ||
| 521 | return 1; | 520 | return 1; |
| 522 | } | ||
| 523 | 521 | ||
| 524 | if (!get_ksymbol_mod(iter)) { | 522 | if ((!iter->pos_ftrace_mod_end || iter->pos_ftrace_mod_end > pos) && |
| 525 | if (!get_ksymbol_ftrace_mod(iter)) | 523 | get_ksymbol_ftrace_mod(iter)) |
| 526 | return get_ksymbol_bpf(iter); | 524 | return 1; |
| 527 | } | ||
| 528 | 525 | ||
| 529 | return 1; | 526 | return get_ksymbol_bpf(iter); |
| 530 | } | 527 | } |
| 531 | 528 | ||
| 532 | /* Returns false if pos at or past end of file. */ | 529 | /* Returns false if pos at or past end of file. */ |
