|
|
- From b1c29c35cba3eb39af18fb8db0ec676e3d658b1d Mon Sep 17 00:00:00 2001
- From: Hauke Mehrtens <hauke.mehrtens@intel.com>
- Date: Fri, 17 Jun 2016 17:38:35 +0200
- Subject: [PATCH] security: fix reading of permission attribute from
- configuration
-
- Casting the pointer to the permission attribute from uint16_t to uint64_t
- causes problems on MIPS Big Endian systems and probably othrs as well.
- When the calling method interprets it as uint64_t not the value is
- converted but the pointer is interpreted as it would point to a 64 bit
- integer, but it is only a 16 bit wide integer. On MIPS BE permission was
- always 0 independent of which value between 0 and 32 the permission
- attribute had, this was probably written to some padding area or into
- some other member of the struct.
-
- This patch fixes the memory corruption and makes the code work for me with
- a MIPS BE CPU.
-
- Change-Id: Ifa843e69980ad4309b1e3076b8e2c98c03324352
- Signed-off-by: Hauke Mehrtens <hauke.mehrtens@intel.com>
- ---
- resource/csdk/security/src/aclresource.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
- --- a/resource/csdk/security/src/aclresource.c
- +++ b/resource/csdk/security/src/aclresource.c
- @@ -602,8 +602,11 @@ OicSecAcl_t* CBORPayloadToAcl(const uint
- // Permissions -- Mandatory
- if (strcmp(name, OIC_JSON_PERMISSION_NAME) == 0)
- {
- - cborFindResult = cbor_value_get_uint64(&aclMap, (uint64_t *) &acl->permission);
- + uint64_t tmp64;
- +
- + cborFindResult = cbor_value_get_uint64(&aclMap, &tmp64);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Finding a PERM Value.");
- + acl->permission = tmp64;
- }
-
- // Period -- Not mandatory
|