Skip to content

Commit

Permalink
Gatekeeperd maintenance
Browse files Browse the repository at this point in the history
* Move gatekeeper aidl definition to system/core/gatekeeperd
  * Retire hand written IGateKeeperService and use generated instead
  * Adjust gatekeeperd to use the generated aidl stubs.
  * Annotated enroll parameters with @nullable to match the
    documentation and the way it was used. (The hand written
    code was tolerant to null parameters, but it was undefined behavior.)
* Removed Software implementation from gatekeeperd.
  * Also removed the upgrade path.
  * Software implementation including test moved to
    hardware/interfaces/gatekeeper/1.0/software

Change-Id: I72b734db6f67b79b29c2629764490d75d179908a
Test: Manually tested setting pin and login.
  • Loading branch information
Janis Danisevskis committed Jun 13, 2019
1 parent 81ebe98 commit 6022d59
Show file tree
Hide file tree
Showing 13 changed files with 454 additions and 1,067 deletions.
37 changes: 35 additions & 2 deletions gatekeeperd/Android.bp
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ cc_binary {
"-Wunused",
],
srcs: [
"SoftGateKeeperDevice.cpp",
"IGateKeeperService.cpp",
"gatekeeperd.cpp",
],

Expand All @@ -43,9 +41,44 @@ cc_binary {
"libhidltransport",
"libhwbinder",
"[email protected]",
"libgatekeeper_aidl",
],

static_libs: ["libscrypt_static"],
include_dirs: ["external/scrypt/lib/crypto"],
init_rc: ["gatekeeperd.rc"],
}

filegroup {
name: "gatekeeper_aidl",
srcs: [
"binder/android/service/gatekeeper/IGateKeeperService.aidl",
],
path: "binder",
}

cc_library_shared {
name: "libgatekeeper_aidl",
srcs: [
":gatekeeper_aidl",
"GateKeeperResponse.cpp",
],
aidl: {
export_aidl_headers: true,
include_dirs: [
"system/core/gatekeeperd/binder",
"frameworks/base/core/java/",
],
},
export_include_dirs: ["include"],
shared_libs: [
"libbase",
"libbinder",
"libcutils",
"liblog",
"libutils",
],
export_shared_lib_headers: [
"libbinder",
],
}
83 changes: 83 additions & 0 deletions gatekeeperd/GateKeeperResponse.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
**
** Copyright 2019, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/

#define LOG_TAG "gatekeeperd"

#include <gatekeeper/GateKeeperResponse.h>

#include <binder/Parcel.h>

#include <android-base/logging.h>

namespace android {
namespace service {
namespace gatekeeper {

status_t GateKeeperResponse::readFromParcel(const Parcel* in) {
if (in == nullptr) {
LOG(ERROR) << "readFromParcel got null in parameter";
return BAD_VALUE;
}
timeout_ = 0;
should_reenroll_ = false;
payload_ = {};
response_code_ = ResponseCode(in->readInt32());
if (response_code_ == ResponseCode::OK) {
should_reenroll_ = in->readInt32();
ssize_t length = in->readInt32();
if (length > 0) {
length = in->readInt32();
const uint8_t* buf = reinterpret_cast<const uint8_t*>(in->readInplace(length));
if (buf == nullptr) {
LOG(ERROR) << "readInplace returned null buffer for length " << length;
return BAD_VALUE;
}
payload_.resize(length);
std::copy(buf, buf + length, payload_.data());
}
} else if (response_code_ == ResponseCode::RETRY) {
timeout_ = in->readInt32();
}
return NO_ERROR;
}
status_t GateKeeperResponse::writeToParcel(Parcel* out) const {
if (out == nullptr) {
LOG(ERROR) << "writeToParcel got null out parameter";
return BAD_VALUE;
}
out->writeInt32(int32_t(response_code_));
if (response_code_ == ResponseCode::OK) {
out->writeInt32(should_reenroll_);
out->writeInt32(payload_.size());
if (payload_.size() != 0) {
out->writeInt32(payload_.size());
uint8_t* buf = reinterpret_cast<uint8_t*>(out->writeInplace(payload_.size()));
if (buf == nullptr) {
LOG(ERROR) << "writeInplace returned null buffer for length " << payload_.size();
return BAD_VALUE;
}
std::copy(payload_.begin(), payload_.end(), buf);
}
} else if (response_code_ == ResponseCode::RETRY) {
out->writeInt32(timeout_);
}
return NO_ERROR;
}

} // namespace gatekeeper
} // namespace service
} // namespace android
173 changes: 0 additions & 173 deletions gatekeeperd/IGateKeeperService.cpp

This file was deleted.

Loading

0 comments on commit 6022d59

Please sign in to comment.