diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/events/uprobes.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c index 4e0db3496d70..897417dbca8e 100644 --- a/kernel/events/uprobes.c +++ b/kernel/events/uprobes.c | |||
| @@ -761,6 +761,16 @@ build_map_info(struct address_space *mapping, loff_t offset, bool is_register) | |||
| 761 | if (!valid_vma(vma, is_register)) | 761 | if (!valid_vma(vma, is_register)) |
| 762 | continue; | 762 | continue; |
| 763 | 763 | ||
| 764 | if (!prev && !more) { | ||
| 765 | /* | ||
| 766 | * Needs GFP_NOWAIT to avoid i_mmap_mutex recursion through | ||
| 767 | * reclaim. This is optimistic, no harm done if it fails. | ||
| 768 | */ | ||
| 769 | prev = kmalloc(sizeof(struct map_info), | ||
| 770 | GFP_NOWAIT | __GFP_NOMEMALLOC | __GFP_NOWARN); | ||
| 771 | if (prev) | ||
| 772 | prev->next = NULL; | ||
| 773 | } | ||
| 764 | if (!prev) { | 774 | if (!prev) { |
| 765 | more++; | 775 | more++; |
| 766 | continue; | 776 | continue; |
