Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1694593 > unrolled thread

[PATCH 0/3] x86 stuff for 4.14

Started byBorislav Petkov <bp@alien8.de>
First post2017-07-24 12:20 +0200
Last post2017-07-25 16:00 +0200
Articles 3 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 0/3] x86 stuff for 4.14 Borislav Petkov <bp@alien8.de> - 2017-07-24 12:20 +0200
    [PATCH 1/3] x86/microcode/AMD: Free unneeded patch before exit from update_cache() Borislav Petkov <bp@alien8.de> - 2017-07-24 12:20 +0200
      [tip:x86/microcode] x86/microcode/AMD: Free unneeded patch before  exit from update_cache() tip-bot for Shu Wang <tipbot@zytor.com> - 2017-07-25 16:00 +0200

#1694593 — [PATCH 0/3] x86 stuff for 4.14

FromBorislav Petkov <bp@alien8.de>
Date2017-07-24 12:20 +0200
Subject[PATCH 0/3] x86 stuff for 4.14
Message-ID<u6ICZ-3oc-3@gated-at.bofh.it>
From: Borislav Petkov <bp@suse.de>

Hi guys,

some fixes that got ready in the meantime. Yazen's goes to tip:ras/core
and the other two to tip:x86/microcode.

Thanks.

Borislav Petkov (1):
  x86/microcode: Document the three loading methods

Shu Wang (1):
  x86/microcode/AMD: Free unneeded patch before exit from update_cache()

Yazen Ghannam (1):
  x86/mce/AMD: Allow any CPU to initialize smca_banks array

 Documentation/x86/early-microcode.txt |  70 -----------------
 Documentation/x86/microcode.txt       | 137 ++++++++++++++++++++++++++++++++++
 arch/x86/kernel/cpu/mcheck/mce_amd.c  |   9 +--
 arch/x86/kernel/cpu/microcode/amd.c   |   5 +-
 4 files changed, 143 insertions(+), 78 deletions(-)
 delete mode 100644 Documentation/x86/early-microcode.txt
 create mode 100644 Documentation/x86/microcode.txt

-- 
2.14.0.rc0

[toc] | [next] | [standalone]


#1694594 — [PATCH 1/3] x86/microcode/AMD: Free unneeded patch before exit from update_cache()

FromBorislav Petkov <bp@alien8.de>
Date2017-07-24 12:20 +0200
Subject[PATCH 1/3] x86/microcode/AMD: Free unneeded patch before exit from update_cache()
Message-ID<u6ID0-3oc-9@gated-at.bofh.it>
In reply to#1694593
From: Shu Wang <shuwang@redhat.com>

verify_and_add_patch() allocates memory for a microcode patch and hands
it down to be added to the cache of patches. However, if the cache
already has the latest patch, the newly allocated one needs to be freed
before returning. Do that.

This issue has been found by kmemleak:

  unreferenced object 0xffff88010e780b40 (size 32):
    comm "bash", pid 860, jiffies 4294690939 (age 29.297s)
    backtrace:
       kmemleak_alloc
       kmem_cache_alloc_trace
       load_microcode_amd.isra.0
       request_microcode_amd
       reload_store
       dev_attr_store
       sysfs_kf_write
       kernfs_fop_write
       __vfs_write
       vfs_write
       SyS_write
       do_syscall_64
       return_from_SYSCALL_64
       0xffffffffffffffff

  (gdb) list *0xffffffff81050d60
  0xffffffff81050d60 is in load_microcode_amd
                (arch/x86/kernel/cpu/microcode/amd.c:616).

which is this:

	patch = kzalloc(sizeof(*patch), GFP_KERNEL);
-->	if (!patch) {
		pr_err("Patch allocation failure.\n");
		return -EINVAL;
	}

Signed-off-by: Shu Wang <shuwang@redhat.com>
Cc: chuhu@redhat.com
Cc: liwang@redhat.com
Cc: x86-ml <x86@kernel.org>
Link: http://lkml.kernel.org/r/1500438083-15996-1-git-send-email-shuwang@redhat.com
[ Rewrite commit message. ]
Signed-off-by: Borislav Petkov <bp@suse.de>
---
 arch/x86/kernel/cpu/microcode/amd.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c
index 21b185793c80..c6daec4bdba5 100644
--- a/arch/x86/kernel/cpu/microcode/amd.c
+++ b/arch/x86/kernel/cpu/microcode/amd.c
@@ -400,9 +400,12 @@ static void update_cache(struct ucode_patch *new_patch)
 
 	list_for_each_entry(p, &microcode_cache, plist) {
 		if (p->equiv_cpu == new_patch->equiv_cpu) {
-			if (p->patch_id >= new_patch->patch_id)
+			if (p->patch_id >= new_patch->patch_id) {
 				/* we already have the latest patch */
+				kfree(new_patch->data);
+				kfree(new_patch);
 				return;
+			}
 
 			list_replace(&p->plist, &new_patch->plist);
 			kfree(p->data);
-- 
2.14.0.rc0

[toc] | [prev] | [next] | [standalone]


#1695759 — [tip:x86/microcode] x86/microcode/AMD: Free unneeded patch before exit from update_cache()

Fromtip-bot for Shu Wang <tipbot@zytor.com>
Date2017-07-25 16:00 +0200
Subject[tip:x86/microcode] x86/microcode/AMD: Free unneeded patch before exit from update_cache()
Message-ID<u78xt-3uy-45@gated-at.bofh.it>
In reply to#1694594
Commit-ID:  a99f03428faa2e53cce17aec0d636de760ec281a
Gitweb:     http://git.kernel.org/tip/a99f03428faa2e53cce17aec0d636de760ec281a
Author:     Shu Wang <shuwang@redhat.com>
AuthorDate: Mon, 24 Jul 2017 12:12:26 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 25 Jul 2017 11:26:19 +0200

x86/microcode/AMD: Free unneeded patch before exit from update_cache()

verify_and_add_patch() allocates memory for a microcode patch and hands
it down to be added to the cache of patches. However, if the cache
already has the latest patch, the newly allocated one needs to be freed
before returning. Do that.

This issue has been found by kmemleak:

  unreferenced object 0xffff88010e780b40 (size 32):
    comm "bash", pid 860, jiffies 4294690939 (age 29.297s)
    backtrace:
       kmemleak_alloc
       kmem_cache_alloc_trace
       load_microcode_amd.isra.0
       request_microcode_amd
       reload_store
       dev_attr_store
       sysfs_kf_write
       kernfs_fop_write
       __vfs_write
       vfs_write
       SyS_write
       do_syscall_64
       return_from_SYSCALL_64
       0xffffffffffffffff

  (gdb) list *0xffffffff81050d60
  0xffffffff81050d60 is in load_microcode_amd
                (arch/x86/kernel/cpu/microcode/amd.c:616).

which is this:

	patch = kzalloc(sizeof(*patch), GFP_KERNEL);
-->	if (!patch) {
		pr_err("Patch allocation failure.\n");
		return -EINVAL;
	}

Signed-off-by: Shu Wang <shuwang@redhat.com>
[ Rewrite commit message. ]
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: chuhu@redhat.com
Cc: liwang@redhat.com
Link: http://lkml.kernel.org/r/20170724101228.17326-2-bp@alien8.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/cpu/microcode/amd.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c
index 21b1857..c6daec4 100644
--- a/arch/x86/kernel/cpu/microcode/amd.c
+++ b/arch/x86/kernel/cpu/microcode/amd.c
@@ -400,9 +400,12 @@ static void update_cache(struct ucode_patch *new_patch)
 
 	list_for_each_entry(p, &microcode_cache, plist) {
 		if (p->equiv_cpu == new_patch->equiv_cpu) {
-			if (p->patch_id >= new_patch->patch_id)
+			if (p->patch_id >= new_patch->patch_id) {
 				/* we already have the latest patch */
+				kfree(new_patch->data);
+				kfree(new_patch);
 				return;
+			}
 
 			list_replace(&p->plist, &new_patch->plist);
 			kfree(p->data);

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web