aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/kallsyms.c25
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 */
509static int update_iter_mod(struct kallsym_iter *iter, loff_t pos) 514static 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. */