Skip to content

Commit

Permalink
otp: convert to use weak default
Browse files Browse the repository at this point in the history
There is no longer any point in having CFG_OTP_SUPPORT.

It's always supported either by the weak implementation
or any platform override.

Since there exists a platform 'sunxi' that does not have
CFG_GENERIC_BOOT and doesn't build generic_boot.c, this
is plaved in a new file 'otp_stubs.c'.  Since this is
just copied Linaro code at this point, keep Linaro
copyright message on the new file.

Signed-off-by: Andy Green <andy@warmcat.com>
  • Loading branch information
lws-team committed Jan 30, 2017
1 parent 6841e18 commit 32dce12
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 27 deletions.
52 changes: 52 additions & 0 deletions core/arch/arm/kernel/otp_stubs.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* Copyright (c) 2015, Linaro Limited
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

#include <inttypes.h>
#include <kernel/tee_common_otp.h>

/*
* Override these in your platform code to really fetch device-unique
* bits from e-fuses or whatever.
*
* The default implementation just sets it to a constant.
*/

__weak void tee_otp_get_hw_unique_key(struct tee_hw_unique_key *hwkey)
{
memset(&hwkey->data[0], 0, sizeof(hwkey->data));
}

__weak int tee_otp_get_die_id(uint8_t *buffer, size_t len)
{
static const char pattern[4] = { 'B', 'E', 'E', 'F' };
size_t i;

for (i = 0; i < len; i++)
buffer[i] = pattern[i % 4];

return 0;
}
1 change: 1 addition & 0 deletions core/arch/arm/kernel/sub.mk
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ srcs-$(CFG_WITH_USER_TA) += user_ta.c
srcs-y += static_ta.c
srcs-y += elf_load.c
srcs-y += tee_time.c
srcs-y += otp_stubs.c

srcs-$(CFG_SECURE_TIME_SOURCE_CNTPCT) += tee_time_arm_cntpct.c
srcs-$(CFG_SECURE_TIME_SOURCE_REE) += tee_time_ree.c
Expand Down
22 changes: 0 additions & 22 deletions core/include/kernel/tee_common_otp.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,29 +36,7 @@ struct tee_hw_unique_key {
uint8_t data[HW_UNIQUE_KEY_LENGTH];
};

#if defined(CFG_OTP_SUPPORT)

void tee_otp_get_hw_unique_key(struct tee_hw_unique_key *hwkey);
int tee_otp_get_die_id(uint8_t *buffer, size_t len);

#else

static inline void tee_otp_get_hw_unique_key(struct tee_hw_unique_key *hwkey)
{
memset(&hwkey->data[0], 0, sizeof(hwkey->data));
}

static inline int tee_otp_get_die_id(uint8_t *buffer, size_t len)
{
size_t i;

char pattern[4] = { 'B', 'E', 'E', 'F' };
for (i = 0; i < len; i++)
buffer[i] = pattern[i % 4];

return 0;
}

#endif /* !defined(CFG_OTP_SUPPORT) */

#endif /* TEE_COMMON_OTP_H */
7 changes: 2 additions & 5 deletions documentation/secure_storage.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,11 +228,8 @@ considered sensitive by the vendors and it is not freely available.
In OP-TEE, there are apis for reading the keys generically from "One-Time
Programmable" memory, or OTP. But there are no existing platform implementations.

To allow Secure Storage to operate securely on your platform, you must:

- enable CFG_OTP_SUPPORT on your platform

- In your platform code, define implementations for:
To allow Secure Storage to operate securely on your platform, you must define
implementations in your platform code for:

```
void tee_otp_get_hw_unique_key(struct tee_hw_unique_key *hwkey);
Expand Down

0 comments on commit 32dce12

Please sign in to comment.