Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
23beccc9
Commit
23beccc9
authored
Jan 23, 2017
by
danh-arm
Committed by
GitHub
Jan 23, 2017
Browse files
Merge pull request #812 from antonio-nino-diaz-arm/an/clear-static-vars
Clear static variables in X509 parser on error
parents
f38d93fd
51c5e1a2
Changes
3
Hide whitespace changes
Inline
Side-by-side
drivers/auth/mbedtls/mbedtls_x509_parser.c
View file @
23beccc9
/*
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2017
, ARM Limited and Contributors. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* modification, are permitted provided that the following conditions are met:
...
@@ -36,6 +36,7 @@
...
@@ -36,6 +36,7 @@
* extensions field, such as an image hash or a public key.
* extensions field, such as an image hash or a public key.
*/
*/
#include <arch_helpers.h>
#include <assert.h>
#include <assert.h>
#include <img_parser_mod.h>
#include <img_parser_mod.h>
#include <mbedtls_common.h>
#include <mbedtls_common.h>
...
@@ -63,6 +64,26 @@ static mbedtls_asn1_buf pk;
...
@@ -63,6 +64,26 @@ static mbedtls_asn1_buf pk;
static
mbedtls_asn1_buf
sig_alg
;
static
mbedtls_asn1_buf
sig_alg
;
static
mbedtls_asn1_buf
signature
;
static
mbedtls_asn1_buf
signature
;
/*
* Clear all static temporary variables.
*/
static
void
clear_temp_vars
(
void
)
{
#define ZERO_AND_CLEAN(x) \
do { \
memset(&x, 0, sizeof(x)); \
clean_dcache_range((uintptr_t)&x, sizeof(x)); \
} while (0);
ZERO_AND_CLEAN
(
tbs
)
ZERO_AND_CLEAN
(
v3_ext
);
ZERO_AND_CLEAN
(
pk
);
ZERO_AND_CLEAN
(
sig_alg
);
ZERO_AND_CLEAN
(
signature
);
#undef ZERO_AND_CLEAN
}
/*
/*
* Get X509v3 extension
* Get X509v3 extension
*
*
...
@@ -134,7 +155,12 @@ static int get_ext(const char *oid, void **ext, unsigned int *ext_len)
...
@@ -134,7 +155,12 @@ static int get_ext(const char *oid, void **ext, unsigned int *ext_len)
/*
/*
* Check the integrity of the certificate ASN.1 structure.
* Check the integrity of the certificate ASN.1 structure.
*
* Extract the relevant data that will be used later during authentication.
* Extract the relevant data that will be used later during authentication.
*
* This function doesn't clear the static variables located on the top of this
* file in case of an error. It is only called from check_integrity(), which
* performs the cleanup if necessary.
*/
*/
static
int
cert_parse
(
void
*
img
,
unsigned
int
img_len
)
static
int
cert_parse
(
void
*
img
,
unsigned
int
img_len
)
{
{
...
@@ -398,9 +424,18 @@ static void init(void)
...
@@ -398,9 +424,18 @@ static void init(void)
mbedtls_init
();
mbedtls_init
();
}
}
/*
* Wrapper for cert_parse() that clears the static variables used by it in case
* of an error.
*/
static
int
check_integrity
(
void
*
img
,
unsigned
int
img_len
)
static
int
check_integrity
(
void
*
img
,
unsigned
int
img_len
)
{
{
return
cert_parse
(
img
,
img_len
);
int
rc
=
cert_parse
(
img
,
img_len
);
if
(
rc
!=
IMG_PARSER_OK
)
clear_temp_vars
();
return
rc
;
}
}
/*
/*
...
...
include/lib/aarch32/arch_helpers.h
View file @
23beccc9
/*
/*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2016
-2017
, ARM Limited and Contributors. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* modification, are permitted provided that the following conditions are met:
...
@@ -33,7 +33,7 @@
...
@@ -33,7 +33,7 @@
#include <arch.h>
/* for additional register definitions */
#include <arch.h>
/* for additional register definitions */
#include <stdint.h>
#include <stdint.h>
#include <types.h>
#include <
sys/
types.h>
/**********************************************************************
/**********************************************************************
* Macros which create inline functions to read or write CPU system
* Macros which create inline functions to read or write CPU system
...
@@ -187,6 +187,9 @@ void flush_dcache_range(uintptr_t addr, size_t size);
...
@@ -187,6 +187,9 @@ void flush_dcache_range(uintptr_t addr, size_t size);
void
clean_dcache_range
(
uintptr_t
addr
,
size_t
size
);
void
clean_dcache_range
(
uintptr_t
addr
,
size_t
size
);
void
inv_dcache_range
(
uintptr_t
addr
,
size_t
size
);
void
inv_dcache_range
(
uintptr_t
addr
,
size_t
size
);
void
dcsw_op_louis
(
u_register_t
op_type
);
void
dcsw_op_all
(
u_register_t
op_type
);
void
disable_mmu_secure
(
void
);
void
disable_mmu_secure
(
void
);
void
disable_mmu_icache_secure
(
void
);
void
disable_mmu_icache_secure
(
void
);
...
...
include/lib/aarch64/arch_helpers.h
View file @
23beccc9
/*
/*
* Copyright (c) 2013-201
5
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2013-201
7
, ARM Limited and Contributors. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* modification, are permitted provided that the following conditions are met:
...
@@ -34,6 +34,7 @@
...
@@ -34,6 +34,7 @@
#include <arch.h>
/* for additional register definitions */
#include <arch.h>
/* for additional register definitions */
#include <cdefs.h>
/* For __dead2 */
#include <cdefs.h>
/* For __dead2 */
#include <stdint.h>
#include <stdint.h>
#include <sys/types.h>
/**********************************************************************
/**********************************************************************
* Macros which create inline functions to read or write CPU system
* Macros which create inline functions to read or write CPU system
...
@@ -143,11 +144,12 @@ DEFINE_SYSOP_TYPE_PARAM_FUNC(at, s12e1w)
...
@@ -143,11 +144,12 @@ DEFINE_SYSOP_TYPE_PARAM_FUNC(at, s12e1w)
DEFINE_SYSOP_TYPE_PARAM_FUNC
(
at
,
s12e0r
)
DEFINE_SYSOP_TYPE_PARAM_FUNC
(
at
,
s12e0r
)
DEFINE_SYSOP_TYPE_PARAM_FUNC
(
at
,
s12e0w
)
DEFINE_SYSOP_TYPE_PARAM_FUNC
(
at
,
s12e0w
)
void
flush_dcache_range
(
uint64_t
,
uint64_t
);
void
flush_dcache_range
(
uintptr_t
addr
,
size_t
size
);
void
clean_dcache_range
(
uint64_t
,
uint64_t
);
void
clean_dcache_range
(
uintptr_t
addr
,
size_t
size
);
void
inv_dcache_range
(
uint64_t
,
uint64_t
);
void
inv_dcache_range
(
uintptr_t
addr
,
size_t
size
);
void
dcsw_op_louis
(
uint32_t
);
void
dcsw_op_all
(
uint32_t
);
void
dcsw_op_louis
(
u_register_t
op_type
);
void
dcsw_op_all
(
u_register_t
op_type
);
void
disable_mmu_el3
(
void
);
void
disable_mmu_el3
(
void
);
void
disable_mmu_icache_el3
(
void
);
void
disable_mmu_icache_el3
(
void
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment