Patch "mm/error_inject: Fix allow_error_inject function signatures." has been added to the 5.9-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    mm/error_inject: Fix allow_error_inject function signatures.

to the 5.9-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mm-error_inject-fix-allow_error_inject-function-sign.patch
and it can be found in the queue-5.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit cf4523bd9ec0e7c29de9edb71bc6307a015ac58c
Author: Alexei Starovoitov <ast@xxxxxxxxxx>
Date:   Thu Aug 27 15:01:10 2020 -0700

    mm/error_inject: Fix allow_error_inject function signatures.
    
    [ Upstream commit 76cd61739fd107a7f7ec4c24a045e98d8ee150f0 ]
    
    'static' and 'static noinline' function attributes make no guarantees that
    gcc/clang won't optimize them. The compiler may decide to inline 'static'
    function and in such case ALLOW_ERROR_INJECT becomes meaningless. The compiler
    could have inlined __add_to_page_cache_locked() in one callsite and didn't
    inline in another. In such case injecting errors into it would cause
    unpredictable behavior. It's worse with 'static noinline' which won't be
    inlined, but it still can be optimized. Like the compiler may decide to remove
    one argument or constant propagate the value depending on the callsite.
    
    To avoid such issues make sure that these functions are global noinline.
    
    Fixes: af3b854492f3 ("mm/page_alloc.c: allow error injection")
    Fixes: cfcbfb1382db ("mm/filemap.c: enable error injection at add_to_page_cache()")
    Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx>
    Signed-off-by: Daniel Borkmann <daniel@xxxxxxxxxxxxx>
    Reviewed-by: Josef Bacik <josef@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/bpf/20200827220114.69225-2-alexei.starovoitov@xxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/mm/filemap.c b/mm/filemap.c
index 99c49eeae71b8..f6d36ccc23515 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -827,10 +827,10 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask)
 }
 EXPORT_SYMBOL_GPL(replace_page_cache_page);
 
-static int __add_to_page_cache_locked(struct page *page,
-				      struct address_space *mapping,
-				      pgoff_t offset, gfp_t gfp_mask,
-				      void **shadowp)
+noinline int __add_to_page_cache_locked(struct page *page,
+					struct address_space *mapping,
+					pgoff_t offset, gfp_t gfp_mask,
+					void **shadowp)
 {
 	XA_STATE(xas, &mapping->i_pages, offset);
 	int huge = PageHuge(page);
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 780c8f023b282..c449d74f55842 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3496,7 +3496,7 @@ static inline bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
 
 #endif /* CONFIG_FAIL_PAGE_ALLOC */
 
-static noinline bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
+noinline bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
 {
 	return __should_fail_alloc_page(gfp_mask, order);
 }



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux