From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1ZWoNi-0006wE-Tb for mharc-grub-devel@gnu.org; Tue, 01 Sep 2015 12:25:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35255) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZWoNb-0006qW-9T for grub-devel@gnu.org; Tue, 01 Sep 2015 12:25:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZWoNW-000436-VE for grub-devel@gnu.org; Tue, 01 Sep 2015 12:25:51 -0400 Received: from mail-bl2on0101.outbound.protection.outlook.com ([65.55.169.101]:43558 helo=na01-bl2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZWoNV-00041x-VF for grub-devel@gnu.org; Tue, 01 Sep 2015 12:25:46 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=amesh@juniper.net; Received: from juniper.net (66.129.239.11) by BL2PR05MB179.namprd05.prod.outlook.com (10.242.198.18) with Microsoft SMTP Server (TLS) id 15.1.243.23; Tue, 1 Sep 2015 14:51:37 +0000 Date: Tue, 1 Sep 2015 07:51:33 -0700 From: Arthur Mesh To: Subject: [PATCH] Remove unconditional disablement of the watchdog Message-ID: <20150901145133.GK47665@juniper.net> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="xrUWgNVErK0vNKPg" Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Originating-IP: [66.129.239.11] X-ClientProxiedBy: BN3PR22CA0038.namprd22.prod.outlook.com (25.165.112.48) To BL2PR05MB179.namprd05.prod.outlook.com (10.242.198.18) X-Microsoft-Exchange-Diagnostics: 1; BL2PR05MB179; 2:fDrsLw9ezSJpvTg4pq+7JW4U7ZdCr6n3Yqn8Lm2nWLpV+FajHD/ckoEZvarRBZuT3fp0uztDpJ19rY62Wksh+DwgQmfKt3OLukRHVi9CUigjbD4XPgfTbYlKrQavdRTpYV9LL40dv21QMKXL11zAjKyCNVHyyp6nqBHaMr8PW0M=; 3:0+PAIOaUUA0M8/MvxOO4YFmlZuQwsopvgFXA2AH7Hdj3wwz6OZS8WVOrms+vhbTCp+rSkUjBpW4ChuVvODgf2rxJK63eTajEiNFziRc7tJchYhfhbZjRt0jG94GyuXCLMewoUfmG4x3XBJO4ii+1Bg==; 25:v6BJsWGFQqIcXbRIrcH+74l5xUzlIihFdPCI2yCO+YyZz+tUwWC5S59Kg4BxW/JzwtUlXJ4cWBooseGV9vDjJ4YR8lk/1dMS3lJP47k8h00sB9pHPHEwgIjfar1glGzjxSbG7+v3s9dRS0pW8mcmt2GqYonOOjxxw1P4G6MOpAEqbE1/Su+iC59FsP6JJ5L+VjpuZ6s5fbBMiH0YS2ZWFOWj/dYBWheKc/GlLC5LIclMhSxB5hwWhb21gOko7fvSiZ4ygUyqqdxlltcSCRqF3g== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BL2PR05MB179; X-Microsoft-Exchange-Diagnostics: 1; BL2PR05MB179; 20:yLijLoTiuVfNuRcLigz8k7ZUKPjnnLPL5sBRnnB+p2rrUMtaKF/Cjuh+gDuS/tr8fMUTGSSjCxM3QbdUEAgo6un8wl0QR4uCWHd1wDAY3yOQd/5kZP5jCA7sjiArGoaoEFUoXfHs61tHLQk6oKsqCqlNeVZmLqtk+t15sbBPT/g8gyTXE+bhkOLObketK8wQva4eOUrV4sIO+Clw923mkY6KKxgof3B0MUBnCinIL9DRBkzXDdmBLsYd0FRkrklFV3bhE/xKrcCLmlERJ1Nsf+ZE8YALUNB5IdjaMpLAqKj3/rnhWtztk/ntrAv4OBHLrL22Eu2GzVbk4xNrd90xAk73ZI0gD4qJNJJ4vgLOEfKFKEMkNtnvNR5ZMLZF2kSK/6suzm8nGjj4CjxhWNVH6LqpjDEvYyeWc6c63roCmtOeipryjFDGITFSFqaj92OsW3kTPP0Kj7Rrbusiz1Qd2HS85cWIALEPq2xUe0AixeZVXpf1uv/tji35wpH9XZCV; 4:UU+1h7iWAgI4hEuKVbCX2BiPG3lLq3eGlzmzVqohoDuM+7Jq+W0pOubVFMBddXvdDGKx8o/5WbbbQxdq1ktN/l90wKLrVHCKrXLAY0Zds42xAyWov037jHIbFZdhDPHJZMVmlP/8HGkRgdyTWEaSJczF7q6ElIAQVOGt5zHFQIWHEC82KynATsQ44uA4jrgcSYLcdcffSsx1VJscC4TOHVMlVdpXOkFGZuTyjxJHhifcDCoJTWsRZvAmZUa7DyDGoPJJVmCFODAiPcs3R76ZgT3SG+Z2BRqMGoXptLB/S9/m132zK51/JK8UFaYThQQRbOmQC0WY4xXvSfiWDhflCg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(8121501046)(3002001); SRVR:BL2PR05MB179; BCL:0; PCL:0; RULEID:; SRVR:BL2PR05MB179; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(189002)(199003)(64706001)(68736005)(21086003)(92566002)(189998001)(110136002)(5001960100002)(77096005)(83506001)(107886002)(512954002)(66066001)(33656002)(5001860100001)(5007970100001)(19580395003)(84326002)(5001830100001)(4001540100001)(81156007)(5004730100002)(97736004)(4001350100001)(575784001)(86362001)(87976001)(450100001)(42186005)(62966003)(69596002)(77156002)(122386002)(101416001)(40100003)(46102003)(106356001)(105586002)(229853001)(2351001)(33026002)(36756003)(50986999)(54356999)(2700100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BL2PR05MB179; 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; BL2PR05MB179; 23:UwMhhm2ziq6k+9wxf9i1j2leDQYVVGl2O+xZejI1tA?= =?us-ascii?Q?nk+FvVDWbp7onMO8K/hVgQerLAAwthXTfx+c/mnCyKUrXB7pwIQegpGz0A1H?= =?us-ascii?Q?BkHnzixm8r5hFElYkDBETeLEqf8xjKGl0wOnNIiFY80U29vJ4nRqhG8unhsi?= =?us-ascii?Q?6bssq3YovVIw3Am/nV8UZeymoxCAnC17U/0fYUCOxCKLP6EEKVW/0A3zXBgq?= =?us-ascii?Q?SpWU4VuYHf5zqwqRJvziT3trgDdfHmVhYCJJxWRLpqu0edrktuXHSshUm26N?= =?us-ascii?Q?TDOPk10r5dH84G8KUGzGx9OuFc1bVLsBC61XMrixVx/w0hONXb1W8dnsLIG1?= =?us-ascii?Q?2w8f+Qg7W6P1A+60km+KTMLH4am58CKs3ArQEhA67FdK4sJS2a5CDya+egaN?= =?us-ascii?Q?EuxvyG7skom9oKb3ilojy/DdKWwBR5WUuis8U+KGXnPenl911V6fku2tyHfH?= =?us-ascii?Q?yWWbPR079ZgrecXxgJKdE4k61b18JdMcb7qkpg+rMFNs2x+1IeASN/mU7d6n?= =?us-ascii?Q?2f+V57/6eJkTOirKKi1eDIAM0V3HVnspDEFh46aWCC7OC4xLKh4UUnCyyEjI?= =?us-ascii?Q?dq1M977Fn9ZL7jZFdwK1xTJcBNOVqrvZrEt7jkqjHzvsG8rpMUtAyQ2YVWn2?= =?us-ascii?Q?yq27cEH4gwyZkKVasZP8xU2/QrICehLaL5CLKWihkNzMvP7iMpyKrc4B84el?= =?us-ascii?Q?E2OEUq0/tcQozi/8CVAEH/pkOT4VEGyl0/RJx64LeXNmTs560LUJsh7jvBCG?= =?us-ascii?Q?AxG8wz36O727kQbgTi+QRTTAMDBEdrzf0Ewb6RxLpDWKQ8I9DI7W5LgM376e?= =?us-ascii?Q?MDsaFkS9TJQ33fDy6rveblFWH/wvNK2/AkYGTTPTAMNgKoLu7STFa6Qb3dph?= =?us-ascii?Q?K6i0+wUndYW5bvkfANtIf4mCVq/0AmG/8RcpIlptfe91n9SMRuSPNMvoHfmH?= =?us-ascii?Q?Ox0g6Td4eXPvXMwJoWGivPCta1uhysb0l2B69Cn4PfhsEqHh60eVvs61rqtS?= =?us-ascii?Q?9dHE5Wxn0EqShk/0VMSJDZAj21DJGKcunwtBkuLB26INDJ7sPQurtRfJkqRb?= =?us-ascii?Q?wkV0EY/tVnpbs4gwSXm5/ujaVA3HninE3YSExP05lK3leH1UPbo2JPmZB/In?= =?us-ascii?Q?uPICU3RTYdWFBxY9bqf0IRiwhq2iJRLjsNCUapLCNriN7oXuv2F9+hTG/Ltw?= =?us-ascii?Q?zj9eN2uZzAXa9mGTZaUNsBGTPsOUsFS+vxyid2PWhlZ96M49OiM5Nvywo+WU?= =?us-ascii?Q?bFhLDSff0iSDh98x0DaA7Zp6r5IE4uGy+nzApk?= X-Microsoft-Exchange-Diagnostics: 1; BL2PR05MB179; 5:59IKVAXnWUSWwhL4iqD8DyoeaKu9zULAbAGEQxpnDRXdONmRO+yUqzRdC63f3Y0YPlUa96rsKxurjPa5UlNSyHhPKO1klHhBk7wiwQEdWTuqcq8qCfaCNT0VoGZ9Qyf5bQENgHFq8CzFxJLoBkDjpA==; 24:lv2/kYPkFrmnssOXwx677sBrATFXsOW3CQ1WlHjMxB+vL6XE6RwVHxN8OLixgBAiaxf+zXO2NQXwa00EbM6WzkZsspR+9Iby23XIq3tbcMo=; 20:Icq5n2IRLdZXpMNPwbdgnWXV7gX7NPzm0SV7JXbQNW9fZlppzjQWRt5dgc6/V3LnUc+VNLs2ccQ+qOTy3mI+eQ== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: juniper.net X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2015 14:51:37.9555 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2PR05MB179 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 X-Received-From: 65.55.169.101 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, 01 Sep 2015 16:25:56 -0000 --xrUWgNVErK0vNKPg 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. Remove the unconditional disablement of the watchdog, and create a command = line interface to enable/disable watchdog: efi-watchdog (enable|disable) --- docs/grub.texi | 8 ++++++ grub-core/kern/efi/init.c | 60 +++++++++++++++++++++++++++++++++++++++++= +--- 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/docs/grub.texi b/docs/grub.texi index b9f41a7..4cfd50c 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,13 @@ 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. +@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..f8a79eb 100644 --- a/grub-core/kern/efi/init.c +++ b/grub-core/kern/efi/init.c @@ -25,9 +25,62 @@ #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; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("efi-watchdog (enable|disable) ")); + + if (grub_strcasecmp (args[0], "enable") =3D=3D 0) { + + if (argc !=3D 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("efi-watchdog enable ")); + + input =3D grub_strtol (args[1], 0, 0); + + if (input >=3D 0) { + timeout =3D 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_("efi-watchdog disable")); + timeout =3D 0; + + } else { + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("efi-watchdog (enable|disable) ")); + } + + status =3D efi_call_4 (grub_efi_system_table->boot_services->set_watch= dog_timer, + timeout, 0, sizeof(L"GRUB"), L"GRUB"); + + if (status !=3D GRUB_EFI_SUCCESS) + return grub_error (GRUB_ERR_BUG, + N_("EFI SetWatchdogTimer() bug")); + else + return GRUB_ERR_NONE; +} + void grub_efi_init (void) { @@ -39,10 +92,10 @@ grub_efi_init (void) /* Initialize the memory management system. */ grub_efi_mm_init (); =20 - efi_call_4 (grub_efi_system_table->boot_services->set_watchdog_timer, - 0, 0, 0, NULL); - 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 +130,5 @@ grub_efi_fini (void) { grub_efidisk_fini (); grub_console_fini (); + grub_unregister_command (cmd_list); } --=20 1.7.9.5 --xrUWgNVErK0vNKPg Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQGcBAABCAAGBQJV5bt1AAoJEAi6IWerhQY4UDAL/ihS487MBH5Aw6bHaPyeirV/ VtRP0thtC27A5CvSCOKXfvgriKWFq/tZKM5KQohjeGSrYCIEQjKqf+aKViknxNue rzgTPPH7qyV3dhl3w7PjQ+XwEVw2ZBadA/wkkLM8Xuk4iX8B0Zo/LUSWXwjAU0jf pE2jxL5nyErw5cgfocnoC+5/Cql5CL0m7sVYhLyrJwvf1junUZTFLovZwvH1h4Mc bDKnv43GHBFvfSppm+JHYpV/0uvQnrPmKBFpwO9gO+cWkO99todyMowuDg+m5z6n PJvsHs+zNqyL80L4vbvXhUnamgcqwwVJEfqlfPcpYGdQ44VXofIuz+viOdN4PMQB heWnjPZsKGe5xMnuNHKe6u0wdofY+jK3lja1y1lJ4S5An06y7xjLSEdI6OHwjcWz ZL++Ii/puX/g7ghbg8NO8pBenWjpaXs3uBf7LNwWYA/yYA94YFwSghmriQ9PY87P aCME+uhRNjqM4r1KnKWnY7BS3IguBRcpAeWk9II7UA== =quu+ -----END PGP SIGNATURE----- --xrUWgNVErK0vNKPg--