Message ID | a1f3242f-1aae-4b46-9893-36b11ee0a6dd@moroto.mountain (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [1/2] mm/khugepaged: Fix an uninitialized variable bug | expand |
On Fri, 20 Oct 2023 17:13:32 +0300 Dan Carpenter <dan.carpenter@linaro.org> wrote: > Smatch complains that "hpage" can be used uninitialized: > > mm/khugepaged.c:1234 collapse_huge_page() > error: uninitialized symbol 'hpage'. > > Initialized it on this path. > > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -1062,8 +1062,10 @@ static int alloc_charge_hpage(struct page **hpage, struct mm_struct *mm, > int node = hpage_collapse_find_target_node(cc); > struct folio *folio; > > - if (!hpage_collapse_alloc_folio(&folio, gfp, node, &cc->alloc_nmask)) > + if (!hpage_collapse_alloc_folio(&folio, gfp, node, &cc->alloc_nmask)) { > + *hpage = NULL; > return SCAN_ALLOC_HUGE_PAGE_FAIL; > + } > > if (unlikely(mem_cgroup_charge(folio, mm, gfp))) { > folio_put(folio); Thanks. Seems this was accidentally fixed by Author: Peter Xu <peterx@redhat.com> AuthorDate: Wed Feb 22 14:52:47 2023 -0500 Commit: Andrew Morton <akpm@linux-foundation.org> CommitDate: Tue Mar 28 16:20:06 2023 -0700 mm/khugepaged: alloc_charge_hpage() take care of mem charge errors Which was quite a long time ago. Are you scanning old kernel versions?
On Fri, Oct 20, 2023 at 09:34:07AM -0700, Andrew Morton wrote: > On Fri, 20 Oct 2023 17:13:32 +0300 Dan Carpenter <dan.carpenter@linaro.org> wrote: > > > Smatch complains that "hpage" can be used uninitialized: > > > > mm/khugepaged.c:1234 collapse_huge_page() > > error: uninitialized symbol 'hpage'. > > > > Initialized it on this path. > > > > --- a/mm/khugepaged.c > > +++ b/mm/khugepaged.c > > @@ -1062,8 +1062,10 @@ static int alloc_charge_hpage(struct page **hpage, struct mm_struct *mm, > > int node = hpage_collapse_find_target_node(cc); > > struct folio *folio; > > > > - if (!hpage_collapse_alloc_folio(&folio, gfp, node, &cc->alloc_nmask)) > > + if (!hpage_collapse_alloc_folio(&folio, gfp, node, &cc->alloc_nmask)) { > > + *hpage = NULL; > > return SCAN_ALLOC_HUGE_PAGE_FAIL; > > + } > > > > if (unlikely(mem_cgroup_charge(folio, mm, gfp))) { > > folio_put(folio); > > Thanks. Seems this was accidentally fixed by > > Author: Peter Xu <peterx@redhat.com> > AuthorDate: Wed Feb 22 14:52:47 2023 -0500 > Commit: Andrew Morton <akpm@linux-foundation.org> > CommitDate: Tue Mar 28 16:20:06 2023 -0700 > > mm/khugepaged: alloc_charge_hpage() take care of mem charge errors > > > Which was quite a long time ago. Are you scanning old kernel versions? There are two error paths. Peter's patch changed the second SCAN_CGROUP_CHARGE_FAIL error path but left the first SCAN_ALLOC_HUGE_PAGE_FAIL error path. To be honest, it's probably a better idea to just add a *hpage = NULL at the start of the function. regards, dan carpenter
diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 0622f8a5175d..a25f5b7c3e7e 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1062,8 +1062,10 @@ static int alloc_charge_hpage(struct page **hpage, struct mm_struct *mm, int node = hpage_collapse_find_target_node(cc); struct folio *folio; - if (!hpage_collapse_alloc_folio(&folio, gfp, node, &cc->alloc_nmask)) + if (!hpage_collapse_alloc_folio(&folio, gfp, node, &cc->alloc_nmask)) { + *hpage = NULL; return SCAN_ALLOC_HUGE_PAGE_FAIL; + } if (unlikely(mem_cgroup_charge(folio, mm, gfp))) { folio_put(folio);
Smatch complains that "hpage" can be used uninitialized: mm/khugepaged.c:1234 collapse_huge_page() error: uninitialized symbol 'hpage'. Initialized it on this path. Fixes: 50ad2f24b3b4 ("mm/khugepaged: propagate enum scan_result codes back to callers") Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org> --- From static analysis. Not tested. mm/khugepaged.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)