blob: ff7a8214da4f22c3c40a569f9a2f59b41ca1775a [file] [log] [blame] [edit]
/* Copyright 2021 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
* The utility functions for firmware updater.
*/
#include <libflashrom.h>
#include "updater.h"
#define FLASHROM_OUTPUT_WP_PATTERN "write protect is "
/* System environment values. */
static const char * const FLASHROM_OUTPUT_WP_ENABLED =
FLASHROM_OUTPUT_WP_PATTERN "enabled",
* const FLASHROM_OUTPUT_WP_DISABLED =
FLASHROM_OUTPUT_WP_PATTERN "disabled";
/* Helper function to return write protection status via given programmer. */
enum wp_state flashrom_get_wp(const char *programmer)
{
char *command, *result;
const char *postfix;
int r;
/* grep is needed because host_shell only returns 1 line. */
postfix = " 2>/dev/null | grep \"" FLASHROM_OUTPUT_WP_PATTERN "\"";
/* TODO(b/203715651): link with flashrom directly. */
ASPRINTF(&command, "flashrom --wp-status -p %s %s", programmer, postfix);
/* invokes flashrom(8) with non-zero result if error. */
result = host_shell(command);
strip_string(result, NULL);
free(command);
VB2_DEBUG("wp-status: %s\n", result);
if (strstr(result, FLASHROM_OUTPUT_WP_ENABLED))
r = WP_ENABLED;
else if (strstr(result, FLASHROM_OUTPUT_WP_DISABLED))
r = WP_DISABLED;
else
r = WP_ERROR;
free(result);
return r;
}