[coreboot-gerrit] Patch set updated for coreboot: e0378b2 libpayload: find source of input characters

Paul Menzel (paulepanter@users.sourceforge.net) gerrit at coreboot.org
Mon Jun 16 17:42:37 CEST 2014


Paul Menzel (paulepanter at users.sourceforge.net) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6003

-gerrit

commit e0378b2c0dbe1bc117caf90971627aba301d9600
Author: Luigi Semenzato <semenzato at chromium.org>
Date:   Mon Jan 13 17:45:54 2014 -0800

    libpayload: find source of input characters
    
    This change makes it possible for vboot to avoid an
    exploit that could cause involuntary switch to dev mode.
    It gives depthcharge/vboot some information on the
    type of input device that generated a key.
    
    BUG=chrome-os-partner:21729
    TEST=manually tested for panther
    BRANCH=none
    CQ-DEPEND=CL:182420,CL:182241,CL:182946
    
    Change-Id: I87bdac34bfc50f3adb0b35a2c57a8f95f4fbc35b
    Signed-off-by: Matt DeVillier <matt.devillier at gmail.com>
    Signed-off-by: Paul Menzel <paulepanter at users.sourceforge.net>
    Reviewed-on: https://chromium-review.googlesource.com/182357
    Reviewed-by: Luigi Semenzato <semenzato at chromium.org>
    Tested-by: Luigi Semenzato <semenzato at chromium.org>
    Commit-Queue: Luigi Semenzato <semenzato at chromium.org>
---
 payloads/libpayload/drivers/usb/usbhid.c   |  3 ++-
 payloads/libpayload/include/libpayload.h   |  7 +++++++
 payloads/libpayload/libc/console.c         | 10 +++++++++-
 src/mainboard/google/panther/devicetree.cb |  3 ++-
 src/southbridge/intel/lynxpoint/lpc.c      |  1 +
 5 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/payloads/libpayload/drivers/usb/usbhid.c b/payloads/libpayload/drivers/usb/usbhid.c
index f14bda0..b8c04f1 100644
--- a/payloads/libpayload/drivers/usb/usbhid.c
+++ b/payloads/libpayload/drivers/usb/usbhid.c
@@ -391,7 +391,8 @@ usb_hid_set_protocol (usbdev_t *dev, interface_descriptor_t *interface, hid_prot
 
 static struct console_input_driver cons = {
 	.havekey = usbhid_havechar,
-	.getchar = usbhid_getchar
+	.getchar = usbhid_getchar,
+	.input_type = CONSOLE_INPUT_TYPE_USB,
 };
 
 
diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h
index 10a4505..14f8a38 100644
--- a/payloads/libpayload/include/libpayload.h
+++ b/payloads/libpayload/include/libpayload.h
@@ -247,12 +247,18 @@ int set_option_from_string(const struct nvram_accessor *nvram, struct cb_cmos_op
  * @defgroup console Console functions
  * @{
  */
+typedef enum {
+	CONSOLE_INPUT_TYPE_UNKNOWN = 0,
+	CONSOLE_INPUT_TYPE_USB,
+} console_input_type;
+
 void console_init(void);
 int putchar(unsigned int c);
 int puts(const char *s);
 int havekey(void);
 int getchar(void);
 int getchar_timeout(int *ms);
+console_input_type last_key_input_type(void);
 
 extern int last_putchar;
 
@@ -261,6 +267,7 @@ struct console_input_driver {
 	struct console_input_driver *next;
 	int (*havekey) (void);
 	int (*getchar) (void);
+	console_input_type input_type;
 };
 
 struct console_output_driver;
diff --git a/payloads/libpayload/libc/console.c b/payloads/libpayload/libc/console.c
index fce6de4..54844db 100644
--- a/payloads/libpayload/libc/console.c
+++ b/payloads/libpayload/libc/console.c
@@ -33,6 +33,7 @@
 
 struct console_output_driver *console_out;
 struct console_input_driver *console_in;
+static console_input_type last_getchar_input_type;
 
 void console_add_output_driver(struct console_output_driver *out)
 {
@@ -115,8 +116,10 @@ int getchar(void)
 #endif
 		struct console_input_driver *in;
 		for (in = console_in; in != 0; in = in->next)
-			if (in->havechar())
+			if (in->havechar()) {
+				last_getchar_input_type = in->input_type;
 				return in->getchar();
+			}
 	}
 }
 
@@ -135,3 +138,8 @@ int getchar_timeout(int *ms)
 
 	return 0;
 }
+
+console_input_type last_key_input_type(void)
+{
+	return last_getchar_input_type;
+}
diff --git a/src/mainboard/google/panther/devicetree.cb b/src/mainboard/google/panther/devicetree.cb
index 7cc3672..d37b622 100644
--- a/src/mainboard/google/panther/devicetree.cb
+++ b/src/mainboard/google/panther/devicetree.cb
@@ -115,7 +115,8 @@ chip northbridge/intel/haswell
 						io 0x60 = 0x700
 						io 0x62 = 0x710
 						irq 0x70 = 0x09
-						irq 0xf4 = 0x20
+						irq 0xf2 = 0x20
+						irq 0xf4 = 0x0
 						irq 0xfa = 0x12
 					end
 					device pnp 2e.7 on # GPIO
diff --git a/src/southbridge/intel/lynxpoint/lpc.c b/src/southbridge/intel/lynxpoint/lpc.c
index 5d1bcdd..9df3750 100644
--- a/src/southbridge/intel/lynxpoint/lpc.c
+++ b/src/southbridge/intel/lynxpoint/lpc.c
@@ -195,6 +195,7 @@ static void pch_power_options(device_t dev)
 	 * If the option is not existent (Laptops), use Kconfig setting.
 	 */
 	get_option(&pwr_on, "power_on_after_fail");
+        pwr_on = MAINBOARD_POWER_KEEP;
 
 	reg16 = pci_read_config16(dev, GEN_PMCON_3);
 	reg16 &= 0xfffe;



More information about the coreboot-gerrit mailing list