diff mbox series

x86/mm, mm/hwpoison: fix unmap kernel 1:1 pages

Message ID 20220207075242.830685-1-luofei@unicloud.com (mailing list archive)
State New, archived
Headers show
Series x86/mm, mm/hwpoison: fix unmap kernel 1:1 pages | expand

Commit Message

luofei Feb. 7, 2022, 7:52 a.m. UTC
Only unmap the page when the memory error is properly handled
by calling memory_failure(), not the other way around.

Fixes: 26f8c38bb466("x86/mm, mm/hwpoison: Don't unconditionally unmap kernel 1:1 pages")

Signed-off-by: luofei <luofei@unicloud.com>
Cc: stable@vger.kernel.org #v4.14
---
 arch/x86/kernel/cpu/mcheck/mce.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Greg KH Feb. 7, 2022, 8:14 a.m. UTC | #1
On Mon, Feb 07, 2022 at 02:52:42AM -0500, luofei wrote:
> Only unmap the page when the memory error is properly handled
> by calling memory_failure(), not the other way around.
> 
> Fixes: 26f8c38bb466("x86/mm, mm/hwpoison: Don't unconditionally unmap kernel 1:1 pages")

This commit is not in Linus's tree.  Please use the correct commit id.

thanks,

greg k-h
Borislav Petkov Feb. 7, 2022, 9:35 a.m. UTC | #2
On Mon, Feb 07, 2022 at 09:14:23AM +0100, Greg KH wrote:
> On Mon, Feb 07, 2022 at 02:52:42AM -0500, luofei wrote:
> > Only unmap the page when the memory error is properly handled
> > by calling memory_failure(), not the other way around.
> > 
> > Fixes: 26f8c38bb466("x86/mm, mm/hwpoison: Don't unconditionally unmap kernel 1:1 pages")
> 
> This commit is not in Linus's tree.  Please use the correct commit id.

I think he's trying to fix the backport:

see 26f8c38bb466c1a2d232d7609fb4bfb4bc121678 which is the stable tree backport:

@@ -582,7 +586,8 @@ static int srao_decode_notifier(struct notifier_block *nb, unsigned long val,
 
        if (mce_usable_address(mce) && (mce->severity == MCE_AO_SEVERITY)) {
                pfn = mce->addr >> PAGE_SHIFT;
-               memory_failure(pfn, MCE_VECTOR, 0);
+               if (memory_failure(pfn, MCE_VECTOR, 0))
+                       mce_unmap_kpfn(pfn);
        }


vs the upstream commit:

fd0e786d9d09024f67bd71ec094b110237dc3840

@@ -590,7 +594,8 @@ static int srao_decode_notifier(struct notifier_block *nb, unsigned long val,
 
        if (mce_usable_address(mce) && (mce->severity == MCE_AO_SEVERITY)) {
                pfn = mce->addr >> PAGE_SHIFT;
-               memory_failure(pfn, 0);
+               if (!memory_failure(pfn, 0))
+                       mce_unmap_kpfn(pfn);
        }
 
        return NOTIFY_OK;
Greg KH Feb. 7, 2022, 10 a.m. UTC | #3
On Mon, Feb 07, 2022 at 10:35:41AM +0100, Borislav Petkov wrote:
> On Mon, Feb 07, 2022 at 09:14:23AM +0100, Greg KH wrote:
> > On Mon, Feb 07, 2022 at 02:52:42AM -0500, luofei wrote:
> > > Only unmap the page when the memory error is properly handled
> > > by calling memory_failure(), not the other way around.
> > > 
> > > Fixes: 26f8c38bb466("x86/mm, mm/hwpoison: Don't unconditionally unmap kernel 1:1 pages")
> > 
> > This commit is not in Linus's tree.  Please use the correct commit id.
> 
> I think he's trying to fix the backport:
> 
> see 26f8c38bb466c1a2d232d7609fb4bfb4bc121678 which is the stable tree backport:
> 
> @@ -582,7 +586,8 @@ static int srao_decode_notifier(struct notifier_block *nb, unsigned long val,
>  
>         if (mce_usable_address(mce) && (mce->severity == MCE_AO_SEVERITY)) {
>                 pfn = mce->addr >> PAGE_SHIFT;
> -               memory_failure(pfn, MCE_VECTOR, 0);
> +               if (memory_failure(pfn, MCE_VECTOR, 0))
> +                       mce_unmap_kpfn(pfn);
>         }
> 
> 
> vs the upstream commit:
> 
> fd0e786d9d09024f67bd71ec094b110237dc3840
> 
> @@ -590,7 +594,8 @@ static int srao_decode_notifier(struct notifier_block *nb, unsigned long val,
>  
>         if (mce_usable_address(mce) && (mce->severity == MCE_AO_SEVERITY)) {
>                 pfn = mce->addr >> PAGE_SHIFT;
> -               memory_failure(pfn, 0);
> +               if (!memory_failure(pfn, 0))
> +                       mce_unmap_kpfn(pfn);
>         }
>  
>         return NOTIFY_OK;
> 

Ah, ok, if so, this needs to be documented really really well in the
changelog text so no one is confused.  Like me :)

thanks,

greg k-h
Greg KH Feb. 7, 2022, 10:18 a.m. UTC | #4
On Mon, Feb 07, 2022 at 10:03:29AM +0000, 罗飞 wrote:
> >I think he's trying to fix the backport:
> >
> >see 26f8c38bb466c1a2d232d7609fb4bfb4bc121678 which is the stable tree backport:
> >
> >@@ -582,7 +586,8 @@ static int srao_decode_notifier(struct notifier_block *nb, unsigned long val,
> >
> >       if (mce_usable_address(mce) && (mce->severity == MCE_AO_SEVERITY)) {
> >               pfn = mce->addr >> PAGE_SHIFT;
> >-               memory_failure(pfn, MCE_VECTOR, 0);
> >+               if (memory_failure(pfn, MCE_VECTOR, 0))
> >+                       mce_unmap_kpfn(pfn);
>  >       }
> >
> >
> >vs the upstream commit:
> >
> >fd0e786d9d09024f67bd71ec094b110237dc3840
> >
> >@@ -590,7 +594,8 @@ static int srao_decode_notifier(struct notifier_block *nb, unsigned long val,
> >
> >        if (mce_usable_address(mce) && (mce->severity == MCE_AO_SEVERITY)) {
> >               pfn = mce->addr >> PAGE_SHIFT;
> >-               memory_failure(pfn, 0);
> >+               if (!memory_failure(pfn, 0))
> >+                       mce_unmap_kpfn(pfn);
> >       }
> >
> >        return NOTIFY_OK;
> 
> 
> Sorry for my not familiar with submitting patches to stable kernel tree, and here Borislav Petkov said exactly what I meant

Great, can you please resend this and document what this patch is doing
and why it is not in upstream and why is it needed only in this one
branch?

thanks,

greg k-h
diff mbox series

Patch

diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index 95c09db1bba2..d8399a689165 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -589,7 +589,7 @@  static int srao_decode_notifier(struct notifier_block *nb, unsigned long val,
 
 	if (mce_usable_address(mce) && (mce->severity == MCE_AO_SEVERITY)) {
 		pfn = mce->addr >> PAGE_SHIFT;
-		if (memory_failure(pfn, MCE_VECTOR, 0))
+		if (!memory_failure(pfn, MCE_VECTOR, 0))
 			mce_unmap_kpfn(pfn);
 	}