From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1ZeUwA-00074g-2I for mharc-grub-devel@gnu.org; Tue, 22 Sep 2015 17:17:18 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54248) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZeUw6-00073W-AK for grub-devel@gnu.org; Tue, 22 Sep 2015 17:17:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZeUw3-0003PA-It for grub-devel@gnu.org; Tue, 22 Sep 2015 17:17:14 -0400 Received: from mail-bn1on0145.outbound.protection.outlook.com ([157.56.110.145]:6272 helo=na01-bn1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZeUw3-0003P0-Cf for grub-devel@gnu.org; Tue, 22 Sep 2015 17:17:11 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=amesh@juniper.net; Received: from juniper.net (66.129.239.11) by SN1PR0501MB1744.namprd05.prod.outlook.com (10.163.130.23) with Microsoft SMTP Server (TLS) id 15.1.274.16; Tue, 22 Sep 2015 21:01:08 +0000 Date: Tue, 22 Sep 2015 14:01:03 -0700 From: Arthur Mesh To: Subject: [PATCH] Make UEFI watchdog behaviour configurable Message-ID: <20150922210103.GS9962@juniper.net> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="WfjJTYUClXDJCnRl" Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [66.129.239.11] X-ClientProxiedBy: BY1PR18CA0009.namprd18.prod.outlook.com (25.162.126.19) To SN1PR0501MB1744.namprd05.prod.outlook.com (25.163.130.23) X-Microsoft-Exchange-Diagnostics: 1; SN1PR0501MB1744; 2:MfBXGVghnzGDaWJf72oYRg/x601jJr8DOPUEt+8IfBZkXpoN2Iy4EVZySRlBA/LFKcQL3VLxKnvZ6o3PyvWfj23gXUXpbfM+OXl8EjWYVQdzJJQBt51Zi7gwfpIQGYzdgXNjSkoT8RGjClnbj7erhaGLVeEFcCzqlnUIANGjxWk=; 3:Qp4JTx7FSFhV9/SiBf1/hyKCCeeYpq8ewQY4wvUL+J7Bh4pzascGOcumW2rBw09pycdZk+949OubrKYdnQwdz2h96vevuEGoFQGEsvKvtQo8rRfbidUkYMihnlm8+R1fLMGAwk0i5beb7eNkn6gFhQ==; 25:8NhP1koIDdVtAlZenlxcKIw1liUCk3G/LfjSMcXMc+rWMxO2qRFK45n3j9zjlX0x9Bnt5hyOciWZen4Ms/+0++/yzWtvxYrb776NwCTgdX70pAiUfuWPHDeD7qFgUBFkhdKnl6yqxdyi5CCTtT45aBE2g5zbwa4WFj8XSiCpZNhUj99vPQmqYXZqnkAaP4BXjDnuwHM4Zira3J45pgfexr8OSa6HSPyKyJjmjw7+L6ZGA1SfEPd4N/TZda552oK+7zYRUAvQOsb2ohOuPzi3Fw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0501MB1744; X-Microsoft-Exchange-Diagnostics: 1; SN1PR0501MB1744; 20:sZEDuyUEidlNFPfmHOjrcmzdZyi01lpqYP2ob+D1ugTylt4XW6tK4MKnPbHRa9JX5mkm5NuEoG9UnHsM4KZDSOd8KYjPO+9mIEAAU8I4xuXEFohNzMX7Qosg3LGQdj1RGyO3zzsy0SJZtXZ6OOf3va7K0BuZKKGzSjkCpXZH7xzyzX3t5M8amI9yoH/no/Um6ld21zTBPrTnx6CGNAB8ku/EbQHJyGZrG86Ce4fDwlEGStUzXQGoxF2HSeoK6E/n8WIE9sBprgzZDvG+PFciVuYXC70mUmhPeyhZMyHbD2Be9+QsWp4x2k78J0qS5uJWn70AUDv1xFmHPCim8GPDA5z2BTVCk+bmh9IyHtJyOFEgeMQ9Rd5MRj1/nFMO+kQqSSDN/j8lyvASbUbpLNJFDrZYcju2sCx0j/mV29hVtOsPzJGfN775Ge3VoAC3q3r6QAwvGwyE00aEPA8bbnE6d5IIa+lgnccEoSCfspblpLOaoAE06H1aHkZO0lm2uDDZ; 4:+dtA35gWfPBOWmqoItT+xnV/1YnmB5n6cz17Cmx+UYPN6P2bcKuDcktXtyf5CQ0fyiiG2j9QD1Kj6l+BIdtR5/u4dyP6bWko3KilatfnqMZlTfHOyEnOTvaQe964At17IuFduthMIDal0cVHPLly0sQLjWVoIXu4HNA/YEhfa9oKtFmFSW1J18GgfSjULMGmYldBqajXESxhR2JUB5o5IcNOLqRzepI91JuMtUftks0Ujfu4Kb5vYXIPLrQuCkuEI++HhVAA6e39uwa/eJvoKMl7r1LRtpg7v6KPSd3GETzyPdYih3pLp0jgx1b7Flnx/sGvayHINchjV4deUPQwW4QLWxd6t+3gWQMOeqmW2vE= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(520078)(8121501046)(5005006)(3002001); SRVR:SN1PR0501MB1744; BCL:0; PCL:0; RULEID:; SRVR:SN1PR0501MB1744; X-Forefront-PRVS: 0707248B64 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(189002)(199003)(512954002)(229853001)(92566002)(5004730100002)(19580395003)(33656002)(77096005)(21086003)(19580405001)(5001960100002)(69596002)(110136002)(189998001)(105586002)(36756003)(2351001)(107886002)(62966003)(68736005)(77156002)(450100001)(122386002)(5007970100001)(33026002)(40100003)(101416001)(83506001)(4001350100001)(42186005)(575784001)(87976001)(86362001)(84326002)(46102003)(97736004)(50986999)(54356999)(5001860100001)(64706001)(106356001)(21480400002)(4001540100001)(5001830100001)(81156007)(66066001)(2700100001); DIR:OUT; SFP:1102; SCL:1; SRVR:SN1PR0501MB1744; H:juniper.net; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: juniper.net does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR0501MB1744; 23:OgHpSOnohE3PLH6JK0T+lnMPrKdjT/SAtFZtBUA?= =?us-ascii?Q?ZC3wZbEuIdtGF2V1R/8HgQ+G6gD3gk3RZ2P6Qp8VLWqjC0qLTSmRxH1KJ6CT?= =?us-ascii?Q?cHlo/cPNv/ae5PDaqqj+2vvQ/lL2CZq0/aErUK7e8WxWjKiAHvj3S4hohygd?= =?us-ascii?Q?T6T6eXp6cXsyftcUUgvvxBxwfAF8m0hhmFnssTYyKOl+AWE4zKfi58WnoYdc?= =?us-ascii?Q?VLjyVjBx0tMnobsLnw4Kz3lCFfJMip7fdHmjjeXiYFRKlIvBzAeHL80fm7Wy?= =?us-ascii?Q?XQn3X3gqRydZShGoNZEN1fRdJ5kBTPNSAq0WujuSFGeu7QBeg5Bi0Ng94zPL?= =?us-ascii?Q?/Xh2sQs4qCcUghDsQKqs3lMZ+xxyTH3/jitBMiiGFhkN9z7MwiFF1ekv+R21?= =?us-ascii?Q?8IWkSblgzJiZQLgeaLbXkNusA3TdSwLM5iRRVAKdzMvTFb6JbeOviGWruZTU?= =?us-ascii?Q?XBWn22IKM2pp3uVH/MV87k+11xRY0rI4576D3SiEI36lVpA9eStG1c+IYn1r?= =?us-ascii?Q?J3IXOzY4t4GbjP+Ryecvu9v2a4QJj51n/UJtWrIPq64S7K/65LCotiFa1o+G?= =?us-ascii?Q?8cLyAHyx+E2KWcnpfVCVPJDnp5AbArvj6Rm+ABYG8qYjIS6quVvjyH0RqUV0?= =?us-ascii?Q?DcejHqaUv8xZGd2SJ0bjZiSNCJbWSFMTshM2aXmFdliwejZwdI+mRYUrAxtt?= =?us-ascii?Q?mdxxzwQMgdvMYm7GuHSae0VK00Mv16Hi5ySBDvIOOXtLk9+ENSWMaeTv5jKL?= =?us-ascii?Q?4X1dcxhnTmK2RjOwN8nVY4yGk6Fs52+JqxRFZQMAEbNQZLUkpPh4B/vSARiF?= =?us-ascii?Q?Be+j74We5rjtE3z4UppKB5BOpbMJRkUaMvPtzFvMt5lVMf+QQTvjMCcoULLL?= =?us-ascii?Q?bKJVJFfH7H4OPuzIUkkOdg0W1a7IaH6/Ev+yBv9D+ZGvTSH61vjXfoPTHrmS?= =?us-ascii?Q?UWRKVW/4NgFFT9Fgxrq0YVRGuEIYfr19PAWr0/a/xda8+C3yYI3O/t3MHQt4?= =?us-ascii?Q?cnqisrfxxM2HUA15QJCxck9AZbfn4Sf1JDGHETui6y8Hf71GQo8pXkMSgQBc?= =?us-ascii?Q?fYVuEAlZ0zIO0P8hDFpm525kfbF1pqm+YRBrstOSLQHMQHFH3mCLDzc++kO5?= =?us-ascii?Q?37E7glIt8/bUS7cPISiQ5Ij+fnvBP2Q8B6ClpISTHYtifdcE6pTh9QBvs0J2?= =?us-ascii?Q?f+2FUsn2xOoXEayKPvn6wsfKGXY5io8or/PIFayImSV4azp7m0oCG3m2Mw4c?= =?us-ascii?Q?1HfrDeS78H4eIdeAz/VZo5z1dLJnwZ5gw2ObYlxxJI8zbwXPtHpxne23RtKe?= =?us-ascii?Q?RLThiPl/XQYJmkJfUwUU7rII=3D?= X-Microsoft-Exchange-Diagnostics: 1; SN1PR0501MB1744; 5:Yh8XLfuFM8I9idxD2HfiZ4xKs+xqeYM8ibTelzqSumk2BYGCbMzI/gYEuE0qwSqf2ulwXDQp5SzY6+ZbHlda2ueV7K0HuSWEBnVU7IsSo0ybFDnFk7i8TUO0VG8oYKk2Z7yv2QhxbM8F0g1AEAVOeg==; 24:bEgddBMDy8P/+g38bsQihqncyOhJSF2zS69z6Qq/9KJ1JH031/591sDllSZWLYxu+rpeulBeUyEOwe1l5ygKnHNRBXXmmHxlomIs2lWydDw=; 20:MS46BVCLQlZLsP3Kjvx1IdcrO8mWc2gCwHgXw7RuKbTdqikuW8WYOabFeBejEespU08Ru8HzM1Dm05Y2Ie+H6Q== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: juniper.net X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2015 21:01:08.6426 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR0501MB1744 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 X-Received-From: 157.56.110.145 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Sep 2015 21:17:15 -0000 --WfjJTYUClXDJCnRl Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Starting with d9a0c9413e81d3c0affc6383693bdd28dc863a5c, GRUB unconditionally disables watchdog on EFI platforms. This opens up a window (starting at GRU= B's grub_efi_init(), until OS re-enables it) when EFI system operates w/o watch= dog. If an EFI system gets stuck in that window, the chipset will never reset the system. Create a command line interface to enable/disable watchdog: efi-watchdog (enable|disable) --- docs/grub.texi | 11 ++++++++ grub-core/kern/efi/init.c | 68 +++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 79 insertions(+) diff --git a/docs/grub.texi b/docs/grub.texi index b9f41a7..507e1c6 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -3784,6 +3784,7 @@ you forget a command, you can run the command @comman= d{help} * distrust:: Remove a pubkey from trusted keys * drivemap:: Map a drive to another * echo:: Display a line of text +* efi-watchdog:: Manipulate EFI watchdog * eval:: Evaluate agruments as GRUB commands * export:: Export an environment variable * false:: Do nothing, unsuccessfully @@ -4192,6 +4193,16 @@ When interpreting backslash escapes, backslash follo= wed by any other character will print that character. @end deffn =20 +@node efi-watchdog +@subsection efi-watchdog + +@deffn Command efi-watchdog enable|disable +Enable or disable the system's watchdog timer. Only available in EFI targe= ted +GRUB. +The is logged upon watchdog timeout event. The UEFI BIOS reserves c= odes +0x0000 to 0xFFFF. +The represents number of seconds to set the watchdog timeout to. +@end deffn =20 @node eval @subsection eval diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c index e9c85de..e3d8288 100644 --- a/grub-core/kern/efi/init.c +++ b/grub-core/kern/efi/init.c @@ -25,9 +25,73 @@ #include #include #include +#include +#include =20 grub_addr_t grub_modbase; =20 +static grub_command_t cmd_list; + +static grub_err_t +grub_cmd_efi_watchdog (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + long input; + grub_efi_status_t status; + grub_efi_uintn_t timeout; + grub_efi_uint64_t code; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("usage: efi-watchdog (enable|disable) ")); + + if (grub_strcasecmp (args[0], "enable") =3D=3D 0) { + + if (argc !=3D 3) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("usage: efi-watchdog enable ")); + + input =3D grub_strtol (args[1], 0, 0); + + if (input >=3D 0) { + code =3D input; + } else { + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_(" must be non-negative")); + } + + input =3D grub_strtol (args[2], 0, 0); + + if (input >=3D 0) { + timeout =3D (grub_efi_uintn_t) input; + } else { + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_(" must be non-negative")); + } + + } else if (grub_strcasecmp (args[0], "disable") =3D=3D 0) { + + if (argc !=3D 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("usage: efi-watchdog disable")); + timeout =3D 0; + code =3D 0; + + } else { + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("usage: efi-watchdog (enable|disable) ")); + } + + status =3D efi_call_4 (grub_efi_system_table->boot_services->set_watch= dog_timer, + timeout, code, sizeof(L"GRUB"), L"GRUB"); + + if (status !=3D GRUB_EFI_SUCCESS) + return grub_error (GRUB_ERR_BUG, + N_("Unexpected UEFI SetWatchdogTimer() error")); + else + return GRUB_ERR_NONE; +} + void grub_efi_init (void) { @@ -43,6 +107,9 @@ grub_efi_init (void) 0, 0, 0, NULL); =20 grub_efidisk_init (); + + cmd_list =3D grub_register_command ("efi-watchdog", grub_cmd_efi_watchdo= g, 0, + N_("Enable/Disable system's watchdog timer.")); } =20 void (*grub_efi_net_config) (grub_efi_handle_t hnd,=20 @@ -77,4 +144,5 @@ grub_efi_fini (void) { grub_efidisk_fini (); grub_console_fini (); + grub_unregister_command (cmd_list); } --=20 1.7.9.5 --=20 Arthur Mesh Juniper Networks +1 408 936-4968 --WfjJTYUClXDJCnRl Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQGcBAABCAAGBQJWAcGPAAoJEAi6IWerhQY4bQ8L/iAKVJCQdouysH/vytGcgzuY Vewzpamm+ey0VXwve5nCgFaPhtXFppwt25obolfNPQyXnm5p7XX8fe8y4q34ZQ2S 6LiGHSXHFk9YfJOimc9Qdm+FcdTsuTLfG7nx/nUGfVP5tMPseC/26j7imRHP83lb lDIKvDErhVTQPFHlnQhNix3LM+EPAfhlM9IvbwQ38FNjg4dPuSb9PLEAu4SG2TAt QmLWJ+M99LXOzRoppN+bsmsO7mlb+v8sd//UUK+PpuA6dN2RSD6K+pe5+y6a4Msx SKvn6dsdALR7BlLgnars+7uX6/TF5gEh/8a1MF9z+Y2HuUVMQQJwzDXners297Qg hnMn32lhR7dZWpL2IRMhyN6gdunI+nUFBVXTwmJlU78wMVVLIM1kgsfdi4Rn/diU svdAX526gT3H6VUsFhgMuoqJ1nWmIWwfd/99Jf3Md746ZgB/BWCCs+MZzpkdjYz2 wGPgi21eK6wGHJPXp8ho+Up6W6yoB+NpEEH1xlnHXg== =Ecr5 -----END PGP SIGNATURE----- --WfjJTYUClXDJCnRl--