x86/ldt: Make LDT pgtable free conditional
authorThomas Gleixner <tglx@linutronix.de>
Sun, 31 Dec 2017 15:52:15 +0000 (16:52 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 2 Jan 2018 19:31:17 +0000 (20:31 +0100)
commit 7f414195b0c3612acd12b4611a5fe75995cf10c7 upstream.

Andy prefers to be paranoid about the pagetable free in the error path of
write_ldt(). Make it conditional and warn whenever the installment of a
secondary LDT fails.

Requested-by: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/kernel/ldt.c

index 500e90e44f8669b0249dc0b16d815c4f77d269fc..26d713ecad34a847e650638d02442eda04379f5e 100644 (file)
@@ -426,7 +426,8 @@ static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode)
                 * already installed then the PTE page is already
                 * populated. Mop up a half populated page table.
                 */
-               free_ldt_pgtables(mm);
+               if (!WARN_ON_ONCE(old_ldt))
+                       free_ldt_pgtables(mm);
                free_ldt_struct(new_ldt);
                goto out_unlock;
        }