Merge "Revert "storageproxyd: Use alternate data path if in DSU state""

This commit is contained in:
David Li 2022-01-21 07:59:42 +00:00 committed by Gerrit Code Review
commit 0a4e111bc6
5 changed files with 4 additions and 71 deletions

View file

@ -35,10 +35,7 @@ cc_binary {
"liblog",
"libhardware_legacy",
],
header_libs: [
"libcutils_headers",
"libgsi_headers",
],
header_libs: ["libcutils_headers"],
static_libs: [
"libfstab",

View file

@ -18,12 +18,9 @@
#include "log.h"
#include <fstab/fstab.h>
#include <unistd.h>
#include <cstring>
#include <string>
#include <libgsi/libgsi.h>
namespace {
bool checkpointingDoneForever = false;
@ -78,15 +75,3 @@ int is_data_checkpoint_active(bool* active) {
return 0;
}
/**
* is_gsi_running() - Check if a GSI image is running via DSU.
*
* This function is equivalent to android::gsi::IsGsiRunning(), but this API is
* not yet vendor-accessible although the underlying metadata file is.
*
*/
bool is_gsi_running() {
/* TODO(b/210501710): Expose GSI image running state to vendor storageproxyd */
return !access(android::gsi::kGsiBootedIndicatorFile, F_OK);
}

View file

@ -32,8 +32,6 @@ extern "C" {
*/
int is_data_checkpoint_active(bool* active);
bool is_gsi_running();
#ifdef __cplusplus
}
#endif

View file

@ -104,11 +104,8 @@ static int drop_privs(void) {
return -1;
}
/*
* No access for group and other. We need execute access for user to create
* an accessible directory.
*/
umask(S_IRWXG | S_IRWXO);
/* no-execute for user, no access for group and other */
umask(S_IXUSR | S_IRWXG | S_IRWXO);
return 0;
}

View file

@ -16,7 +16,6 @@
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <libgen.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
@ -25,16 +24,13 @@
#include <sys/types.h>
#include <unistd.h>
#include "checkpoint_handling.h"
#include "ipc.h"
#include "log.h"
#include "ipc.h"
#include "storage.h"
#define FD_TBL_SIZE 64
#define MAX_READ_SIZE 4096
#define ALTERNATE_DATA_DIR "alternate/"
enum sync_state {
SS_UNUSED = -1,
SS_CLEAN = 0,
@ -48,8 +44,6 @@ static enum sync_state fs_state;
static enum sync_state dir_state;
static enum sync_state fd_state[FD_TBL_SIZE];
static bool alternate_mode;
static struct {
struct storage_file_read_resp hdr;
uint8_t data[MAX_READ_SIZE];
@ -222,7 +216,6 @@ int storage_file_open(struct storage_msg *msg,
const void *r, size_t req_len)
{
char *path = NULL;
char* parent_path;
const struct storage_file_open_req *req = r;
struct storage_file_open_resp resp = {0};
@ -241,24 +234,6 @@ int storage_file_open(struct storage_msg *msg,
goto err_response;
}
/*
* TODO(b/210501710): Expose GSI image running state to vendor
* storageproxyd. We want to control data file paths in vendor_init, but we
* don't have access to the necessary property there yet. When we have
* access to that property we can set the root data path read-only and only
* allow creation of files in alternate/. Checking paths here temporarily
* until that is fixed.
*
* We are just checking for "/" instead of "alternate/" because we still
* want to still allow access to "persist/" in alternate mode (for now, this
* may change in the future).
*/
if (alternate_mode && !strchr(req->name, '/')) {
ALOGE("%s: Cannot open root data file \"%s\" in alternate mode\n", __func__, req->name);
msg->result = STORAGE_ERR_ACCESS;
goto err_response;
}
int rc = asprintf(&path, "%s/%s", ssdir_name, req->name);
if (rc < 0) {
ALOGE("%s: asprintf failed\n", __func__);
@ -271,23 +246,7 @@ int storage_file_open(struct storage_msg *msg,
if (req->flags & STORAGE_FILE_OPEN_TRUNCATE)
open_flags |= O_TRUNC;
parent_path = dirname(path);
if (req->flags & STORAGE_FILE_OPEN_CREATE) {
/*
* Create the alternate parent dir if needed & allowed.
*
* TODO(b/210501710): Expose GSI image running state to vendor
* storageproxyd. This directory should be created by vendor_init, once
* it has access to the necessary bit of information.
*/
if (strstr(req->name, ALTERNATE_DATA_DIR) == req->name) {
rc = mkdir(parent_path, S_IRWXU);
if (rc && errno != EEXIST) {
ALOGE("%s: Could not create parent directory \"%s\": %s\n", __func__, parent_path,
strerror(errno));
}
}
/* open or create */
if (req->flags & STORAGE_FILE_OPEN_CREATE_EXCLUSIVE) {
/* create exclusive */
@ -508,9 +467,6 @@ err_response:
int storage_init(const char *dirname)
{
/* If there is an active DSU image, use the alternate fs mode. */
alternate_mode = is_gsi_running();
fs_state = SS_CLEAN;
dir_state = SS_CLEAN;
for (uint i = 0; i < FD_TBL_SIZE; i++) {