Message ID | 20171215125129.2948634-1-arnd@arndb.de |
---|---|
State | New |
Headers | show |
Series | mm: thp: avoid uninitialized variable use | expand |
On Fri 15-12-17 13:51:04, Arnd Bergmann wrote: > When the down_read_trylock() fails, 'vma' has not been initialized > yet, which gcc now warns about: > > mm/khugepaged.c: In function 'khugepaged': > mm/khugepaged.c:1659:25: error: 'vma' may be used uninitialized in this function [-Werror=maybe-uninitialized] ups missed that > > Presumable we are not supposed to call find_vma() without the mmap_sem > either, so setting it to NULL for this case seems appropriate. yes > Fixes: 0951b59acf3a ("mm: thp: use down_read_trylock() in khugepaged to avoid long block") This sha is not stable because this is a mmotm tree. I assume Andrew will fold it to mm-thp-use-down_read_trylock-in-khugepaged-to-avoid-long-block.patch. The patch looks good to me. I would initialize the vma in the declaration, but that is a minor thing. > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Michal Hocko <mhocko@suse.com> > --- > I'm not completely sure this patch is sufficient, it gets rid of > the warning, but it would be good to have the code reviewed better > to see if other problems remain that result from down_read_trylock() > patch. > --- > mm/khugepaged.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index 521b908f9600..b7e2268dfc9a 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -1677,11 +1677,10 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, > * Don't wait for semaphore (to avoid long wait times). Just move to > * the next mm on the list. > */ > + vma = NULL; > if (unlikely(!down_read_trylock(&mm->mmap_sem))) > goto breakouterloop_mmap_sem; > - if (unlikely(khugepaged_test_exit(mm))) > - vma = NULL; > - else > + if (likely(!khugepaged_test_exit(mm))) > vma = find_vma(mm, khugepaged_scan.address); > > progress++; > -- > 2.9.0 > -- Michal Hocko SUSE Labs
On 12/15/17 4:51 AM, Arnd Bergmann wrote: > When the down_read_trylock() fails, 'vma' has not been initialized > yet, which gcc now warns about: > > mm/khugepaged.c: In function 'khugepaged': > mm/khugepaged.c:1659:25: error: 'vma' may be used uninitialized in this function [-Werror=maybe-uninitialized] Arnd, Thanks for catching this. I'm wondering why my test didn't catch it. It might be because my gcc is old. I'm using gcc 4.8.5 on centos 7. Regards, Yang > > Presumable we are not supposed to call find_vma() without the mmap_sem > either, so setting it to NULL for this case seems appropriate. > > Fixes: 0951b59acf3a ("mm: thp: use down_read_trylock() in khugepaged to avoid long block") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > I'm not completely sure this patch is sufficient, it gets rid of > the warning, but it would be good to have the code reviewed better > to see if other problems remain that result from down_read_trylock() > patch. > --- > mm/khugepaged.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index 521b908f9600..b7e2268dfc9a 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -1677,11 +1677,10 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, > * Don't wait for semaphore (to avoid long wait times). Just move to > * the next mm on the list. > */ > + vma = NULL; > if (unlikely(!down_read_trylock(&mm->mmap_sem))) > goto breakouterloop_mmap_sem; > - if (unlikely(khugepaged_test_exit(mm))) > - vma = NULL; > - else > + if (likely(!khugepaged_test_exit(mm))) > vma = find_vma(mm, khugepaged_scan.address); > > progress++; >
On Fri, Dec 15, 2017 at 7:01 PM, Yang Shi <yang.s@alibaba-inc.com> wrote: > > > On 12/15/17 4:51 AM, Arnd Bergmann wrote: >> >> When the down_read_trylock() fails, 'vma' has not been initialized >> yet, which gcc now warns about: >> >> mm/khugepaged.c: In function 'khugepaged': >> mm/khugepaged.c:1659:25: error: 'vma' may be used uninitialized in this >> function [-Werror=maybe-uninitialized] > > > Arnd, > > Thanks for catching this. I'm wondering why my test didn't catch it. It > might be because my gcc is old. I'm using gcc 4.8.5 on centos 7. Correct, gcc-4.8 and earlier have too many false-positive warnings with -Wmaybe-uninitialized, so we turn it off on those versions. 4.9 is much better here, but I'd recommend using gcc-6 or gcc-7 when you upgrade, they have a much better set of default warnings besides producing better binary code. See http://git.infradead.org/users/segher/buildall.git for a simple way to build toolchains suitable for building kernels in varying architectures and versions. Arnd
On 12/16/17 4:24 AM, Arnd Bergmann wrote: > On Fri, Dec 15, 2017 at 7:01 PM, Yang Shi <yang.s@alibaba-inc.com> wrote: >> >> >> On 12/15/17 4:51 AM, Arnd Bergmann wrote: >>> >>> When the down_read_trylock() fails, 'vma' has not been initialized >>> yet, which gcc now warns about: >>> >>> mm/khugepaged.c: In function 'khugepaged': >>> mm/khugepaged.c:1659:25: error: 'vma' may be used uninitialized in this >>> function [-Werror=maybe-uninitialized] >> >> >> Arnd, >> >> Thanks for catching this. I'm wondering why my test didn't catch it. It >> might be because my gcc is old. I'm using gcc 4.8.5 on centos 7. > > Correct, gcc-4.8 and earlier have too many false-positive warnings with > -Wmaybe-uninitialized, so we turn it off on those versions. 4.9 is much > better here, but I'd recommend using gcc-6 or gcc-7 when you upgrade, > they have a much better set of default warnings besides producing better > binary code. Thanks, I just upgraded gcc to 6.4 on my cetnos 7 machine. But, I ran into a build error with 4.15-rc3 kernel, but 4.14 is fine. I bisected to a commit in Makefile. I will email my bug report to the mailing list. Regards, Yang > > See http://git.infradead.org/users/segher/buildall.git for a simple way > to build toolchains suitable for building kernels in varying architectures > and versions. > > Arnd >
diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 521b908f9600..b7e2268dfc9a 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1677,11 +1677,10 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, * Don't wait for semaphore (to avoid long wait times). Just move to * the next mm on the list. */ + vma = NULL; if (unlikely(!down_read_trylock(&mm->mmap_sem))) goto breakouterloop_mmap_sem; - if (unlikely(khugepaged_test_exit(mm))) - vma = NULL; - else + if (likely(!khugepaged_test_exit(mm))) vma = find_vma(mm, khugepaged_scan.address); progress++;
When the down_read_trylock() fails, 'vma' has not been initialized yet, which gcc now warns about: mm/khugepaged.c: In function 'khugepaged': mm/khugepaged.c:1659:25: error: 'vma' may be used uninitialized in this function [-Werror=maybe-uninitialized] Presumable we are not supposed to call find_vma() without the mmap_sem either, so setting it to NULL for this case seems appropriate. Fixes: 0951b59acf3a ("mm: thp: use down_read_trylock() in khugepaged to avoid long block") Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- I'm not completely sure this patch is sufficient, it gets rid of the warning, but it would be good to have the code reviewed better to see if other problems remain that result from down_read_trylock() patch. --- mm/khugepaged.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) -- 2.9.0