stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Dexuan Cui <decui@microsoft.com>,
	Jethro Beekman <jethro@fortanix.com>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Subject: [PATCH 4.19 07/43] ACPI: scan: Harden acpi_device_add() against device ID overflows
Date: Mon, 18 Jan 2021 12:34:30 +0100	[thread overview]
Message-ID: <20210118113335.300337021@linuxfoundation.org> (raw)
In-Reply-To: <20210118113334.966227881@linuxfoundation.org>

From: Dexuan Cui <decui@microsoft.com>

commit a58015d638cd4e4555297b04bec9b49028369075 upstream.

Linux VM on Hyper-V crashes with the latest mainline:

[    4.069624] detected buffer overflow in strcpy
[    4.077733] kernel BUG at lib/string.c:1149!
..
[    4.085819] RIP: 0010:fortify_panic+0xf/0x11
...
[    4.085819] Call Trace:
[    4.085819]  acpi_device_add.cold.15+0xf2/0xfb
[    4.085819]  acpi_add_single_object+0x2a6/0x690
[    4.085819]  acpi_bus_check_add+0xc6/0x280
[    4.085819]  acpi_ns_walk_namespace+0xda/0x1aa
[    4.085819]  acpi_walk_namespace+0x9a/0xc2
[    4.085819]  acpi_bus_scan+0x78/0x90
[    4.085819]  acpi_scan_init+0xfa/0x248
[    4.085819]  acpi_init+0x2c1/0x321
[    4.085819]  do_one_initcall+0x44/0x1d0
[    4.085819]  kernel_init_freeable+0x1ab/0x1f4

This is because of the recent buffer overflow detection in the
commit 6a39e62abbaf ("lib: string.h: detect intra-object overflow in
fortified string functions")

Here acpi_device_bus_id->bus_id can only hold 14 characters, while the
the acpi_device_hid(device) returns a 22-char string
"HYPER_V_GEN_COUNTER_V1".

Per ACPI Spec v6.2, Section 6.1.5 _HID (Hardware ID), if the ID is a
string, it must be of the form AAA#### or NNNN####, i.e. 7 chars or 8
chars.

The field bus_id in struct acpi_device_bus_id was originally defined as
char bus_id[9], and later was enlarged to char bus_id[15] in 2007 in the
commit bb0958544f3c ("ACPI: use more understandable bus_id for ACPI
devices")

Fix the issue by changing the field bus_id to const char *, and use
kstrdup_const() to initialize it.

Signed-off-by: Dexuan Cui <decui@microsoft.com>
Tested-By: Jethro Beekman <jethro@fortanix.com>
[ rjw: Subject change, whitespace adjustment ]
Cc: All applicable <stable@vger.kernel.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/acpi/internal.h |    2 +-
 drivers/acpi/scan.c     |   15 ++++++++++++++-
 2 files changed, 15 insertions(+), 2 deletions(-)

--- a/drivers/acpi/internal.h
+++ b/drivers/acpi/internal.h
@@ -98,7 +98,7 @@ void acpi_scan_table_handler(u32 event,
 extern struct list_head acpi_bus_id_list;
 
 struct acpi_device_bus_id {
-	char bus_id[15];
+	const char *bus_id;
 	unsigned int instance_no;
 	struct list_head node;
 };
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -486,6 +486,7 @@ static void acpi_device_del(struct acpi_
 				acpi_device_bus_id->instance_no--;
 			else {
 				list_del(&acpi_device_bus_id->node);
+				kfree_const(acpi_device_bus_id->bus_id);
 				kfree(acpi_device_bus_id);
 			}
 			break;
@@ -674,7 +675,14 @@ int acpi_device_add(struct acpi_device *
 	}
 	if (!found) {
 		acpi_device_bus_id = new_bus_id;
-		strcpy(acpi_device_bus_id->bus_id, acpi_device_hid(device));
+		acpi_device_bus_id->bus_id =
+			kstrdup_const(acpi_device_hid(device), GFP_KERNEL);
+		if (!acpi_device_bus_id->bus_id) {
+			pr_err(PREFIX "Memory allocation error for bus id\n");
+			result = -ENOMEM;
+			goto err_free_new_bus_id;
+		}
+
 		acpi_device_bus_id->instance_no = 0;
 		list_add_tail(&acpi_device_bus_id->node, &acpi_bus_id_list);
 	}
@@ -709,6 +717,11 @@ int acpi_device_add(struct acpi_device *
 	if (device->parent)
 		list_del(&device->node);
 	list_del(&device->wakeup_list);
+
+ err_free_new_bus_id:
+	if (!found)
+		kfree(new_bus_id);
+
 	mutex_unlock(&acpi_device_lock);
 
  err_detach:



  parent reply	other threads:[~2021-01-18 19:54 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-18 11:34 [PATCH 4.19 00/43] 4.19.169-rc1 review Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 01/43] ASoC: dapm: remove widget from dirty list on free Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 02/43] x86/hyperv: check cpu mask after interrupt has been disabled Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 03/43] tracing/kprobes: Do the notrace functions check without kprobes on ftrace Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 04/43] MIPS: boot: Fix unaligned access with CONFIG_MIPS_RAW_APPENDED_DTB Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 05/43] MIPS: Fix malformed NT_FILE and NT_SIGINFO in 32bit coredumps Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 06/43] MIPS: relocatable: fix possible boot hangup with KASLR enabled Greg Kroah-Hartman
2021-01-18 11:34 ` Greg Kroah-Hartman [this message]
2021-01-18 11:34 ` [PATCH 4.19 08/43] mm/hugetlb: fix potential missing huge page size info Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 09/43] dm snapshot: flush merged data before committing metadata Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 10/43] dm integrity: fix the maximum number of arguments Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 11/43] r8152: Add Lenovo Powered USB-C Travel Hub Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 12/43] ext4: fix bug for rename with RENAME_WHITEOUT Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 13/43] ARC: build: remove non-existing bootpImage from KBUILD_IMAGE Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 14/43] ARC: build: add uImage.lzma to the top-level target Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 15/43] ARC: build: add boot_targets to PHONY Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 16/43] btrfs: fix transaction leak and crash after RO remount caused by qgroup rescan Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 17/43] ethernet: ucc_geth: fix definition and size of ucc_geth_tx_global_pram Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 18/43] bfq: Fix computation of shallow depth Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 19/43] arch/arc: add copy_user_page() to <asm/page.h> to fix build error on ARC Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 20/43] misdn: dsp: select CONFIG_BITREVERSE Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 21/43] net: ethernet: fs_enet: Add missing MODULE_LICENSE Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 22/43] ACPI: scan: add stub acpi_create_platform_device() for !CONFIG_ACPI Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 23/43] drm/msm: Call msm_init_vram before binding the gpu Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 24/43] ARM: picoxcell: fix missing interrupt-parent properties Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 25/43] ima: Remove __init annotation from ima_pcrread() Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 26/43] dump_common_audit_data(): fix racy accesses to ->d_name Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 27/43] ASoC: meson: axg-tdm-interface: fix loopback Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 28/43] ASoC: Intel: fix error code cnl_set_dsp_D0() Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 29/43] NFS4: Fix use-after-free in trace_event_raw_event_nfs4_set_lock Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 30/43] pNFS: Mark layout for return if return-on-close was not sent Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 31/43] NFS/pNFS: Fix a leak of the layout plh_outstanding counter Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 32/43] NFS: nfs_igrab_and_active must first reference the superblock Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 33/43] ext4: fix superblock checksum failure when setting password salt Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 34/43] RDMA/usnic: Fix memleak in find_free_vf_and_create_qp_grp Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 35/43] RDMA/mlx5: Fix wrong free of blue flame register on error Greg Kroah-Hartman
2021-01-18 11:34 ` [PATCH 4.19 36/43] mm, slub: consider rest of partial list if acquire_slab() fails Greg Kroah-Hartman
2021-01-18 11:35 ` [PATCH 4.19 37/43] net: sunrpc: interpret the return value of kstrtou32 correctly Greg Kroah-Hartman
2021-01-18 11:35 ` [PATCH 4.19 38/43] dm: eliminate potential source of excessive kernel log noise Greg Kroah-Hartman
2021-01-18 11:35 ` [PATCH 4.19 39/43] ALSA: firewire-tascam: Fix integer overflow in midi_port_work() Greg Kroah-Hartman
2021-01-18 11:35 ` [PATCH 4.19 40/43] ALSA: fireface: Fix integer overflow in transmit_midi_msg() Greg Kroah-Hartman
2021-01-18 11:35 ` [PATCH 4.19 41/43] netfilter: conntrack: fix reading nf_conntrack_buckets Greg Kroah-Hartman
2021-01-18 11:35 ` [PATCH 4.19 42/43] netfilter: nf_nat: Fix memleak in nf_nat_init Greg Kroah-Hartman
2021-01-18 11:35 ` [PATCH 4.19 43/43] kbuild: enforce -Werror=return-type Greg Kroah-Hartman
2021-01-18 14:40 ` [PATCH 4.19 00/43] 4.19.169-rc1 review Naresh Kamboju
2021-01-18 15:24   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210118113335.300337021@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=decui@microsoft.com \
    --cc=jethro@fortanix.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).