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


Groups > linux.kernel > #1363858

[PATCH 23/30] ACPICA: Hardware: Enhance acpi_hw_validate_register() with access_width/bit_offset awareness

From Lv Zheng <lv.zheng@intel.com>
Newsgroups linux.kernel
Subject [PATCH 23/30] ACPICA: Hardware: Enhance acpi_hw_validate_register() with access_width/bit_offset awareness
Date 2016-03-24 02:50 +0100
Message-ID <rg2zq-3Dt-37@gated-at.bofh.it> (permalink)
References <rg2pH-3zI-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


ACPICA commit 997a90f810a4cb78604ef2e187611a181b498286

This patch enhances acpi_hw_validate_register() to sanitize register
accesses with awareness of access_width and bit_offset. Lv Zheng.

Link: https://github.com/acpica/acpica/commit/997a90f8
Link: https://bugs.acpica.org/show_bug.cgi?id=1240
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
---
 drivers/acpi/acpica/hwregs.c |   25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/drivers/acpi/acpica/hwregs.c b/drivers/acpi/acpica/hwregs.c
index 93f8831..bc3f60a 100644
--- a/drivers/acpi/acpica/hwregs.c
+++ b/drivers/acpi/acpica/hwregs.c
@@ -83,6 +83,8 @@ acpi_status
 acpi_hw_validate_register(struct acpi_generic_address *reg,
 			  u8 max_bit_width, u64 *address)
 {
+	u8 bit_width;
+	u8 access_width;
 
 	/* Must have a valid pointer to a GAS structure */
 
@@ -109,23 +111,26 @@ acpi_hw_validate_register(struct acpi_generic_address *reg,
 		return (AE_SUPPORT);
 	}
 
-	/* Validate the bit_width */
+	/* Validate the access_width */
 
-	if ((reg->bit_width != 8) &&
-	    (reg->bit_width != 16) &&
-	    (reg->bit_width != 32) && (reg->bit_width != max_bit_width)) {
+	if (reg->access_width > 4) {
 		ACPI_ERROR((AE_INFO,
-			    "Unsupported register bit width: 0x%X",
-			    reg->bit_width));
+			    "Unsupported register access width: 0x%X",
+			    reg->access_width));
 		return (AE_SUPPORT);
 	}
 
-	/* Validate the bit_offset. Just a warning for now. */
+	/* Validate the bit_width, convert access_width into number of bits */
 
-	if (reg->bit_offset != 0) {
+	access_width = reg->access_width ? reg->access_width : 1;
+	access_width = 1 << (access_width + 2);
+	bit_width =
+	    ACPI_ROUND_UP(reg->bit_offset + reg->bit_width, access_width);
+	if (max_bit_width < bit_width) {
 		ACPI_WARNING((AE_INFO,
-			      "Unsupported register bit offset: 0x%X",
-			      reg->bit_offset));
+			      "Requested bit width 0x%X is smaller than register bit width 0x%X",
+			      max_bit_width, bit_width));
+		return (AE_SUPPORT);
 	}
 
 	return (AE_OK);
-- 
1.7.10

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/30] ACPICA: 20160318 Release Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:40 +0100
  [PATCH 28/30] ACPICA: Events: Fix an issue that _REG association can happen before namespace is initialized Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 24/30] ACPICA: Hardware: Add access_width/bit_offset support in acpi_hw_read() Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
    RE: [PATCH 24/30] ACPICA: Hardware: Add access_width/bit_offset  support in acpi_hw_read() "Zheng, Lv" <lv.zheng@intel.com> - 2016-03-29 10:20 +0200
  [PATCH 21/30] ACPICA: Utilities: Add ACPI_IS_POWER_OF_TWO() Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 26/30] ACPICA: Interpreter: Fix wrong conditions for acpi_ev_install_region_handlers() invocation Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 17/30] ACPICA: Add support for QNX 6.6 platform Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 14/30] ACPICA: iASL: Cleanup/optimization for ToPLD macro support Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 29/30] ACPICA: Namespace: Reorder \_SB._INI to make sure it is evaluated before _REG evaluations Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 30/30] ACPICA: Update version to 20160318 Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 16/30] ACPICA: Headers: Update generation of the ACPICA library Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 20/30] ACPICA: iASL/Disassembler: Improve handling of unresolved methods Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 19/30] ACPICA: All: const keyword changes across the ACPICA source Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 25/30] ACPICA: Hardware: Add access_width/bit_offset support for acpi_hw_write() Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 18/30] ACPICA: Utilities: Update for strtoul64 merger Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 13/30] ACPICA: Interpreter: Update some function headers, no functional change Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 22/30] Utilities: Fix missing parentheses in ACPI_GET_BITS()/ACPI_SET_BITS() Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 23/30] ACPICA: Hardware: Enhance acpi_hw_validate_register() with access_width/bit_offset awareness Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 15/30] ACPICA: Cleanup some invocation indentations, no functional change Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 12/30] ACPICA: Intepreter: Add object extensions to Concatenate operand Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 27/30] ACPICA: Tables: Fix wrong MLC condition for dynamic table loading Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  [PATCH 06/30] ACPICA: IORT: Add in support for the SMMUv3 subtable Lv Zheng <lv.zheng@intel.com> - 2016-03-24 02:50 +0100
  Re: [PATCH 00/30] ACPICA: 20160318 Release "Rafael J. Wysocki" <rafael@kernel.org> - 2016-03-24 14:10 +0100
    RE: [PATCH 00/30] ACPICA: 20160318 Release "Zheng, Lv" <lv.zheng@intel.com> - 2016-03-28 05:10 +0200

csiph-web