Prevent some CAPI exception leakage 48/242548/4
authorKonrad Lipinski <k.lipinski2@samsung.com>
Mon, 14 Sep 2020 13:10:02 +0000 (15:10 +0200)
committerKonrad Lipinski <k.lipinski2@samsung.com>
Mon, 14 Sep 2020 13:10:02 +0000 (15:10 +0200)
Change-Id: Ic9fb8985f6052479e7c9c6e24cf24607f34e3526

src/manager/client-capi/ckmc-control.cpp
src/manager/client-capi/ckmc-type.cpp

index 2ee1438..66e1c31 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *  Copyright (c) 2000-2020 Samsung Electronics Co., Ltd. All rights reserved
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -39,50 +39,72 @@ CKM::Password _toPasswordStr(const char *str)
 KEY_MANAGER_CAPI
 int ckmc_unlock_user_key(uid_t user, const char *password)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        auto control = CKM::Control::create();
        int ret = control->unlockUserKey(user, _toPasswordStr(password));
        return to_ckmc_error(ret);
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
 int ckmc_lock_user_key(uid_t user)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        auto control = CKM::Control::create();
        int ret = control->lockUserKey(user);
        return to_ckmc_error(ret);
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
 int ckmc_remove_user_data(uid_t user)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        auto control = CKM::Control::create();
        int ret = control->removeUserData(user);
        return to_ckmc_error(ret);
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
 int ckmc_change_user_password(uid_t user, const char *oldPassword,
                                                          const char *newPassword)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        auto control = CKM::Control::create();
        int ret = control->changeUserPassword(user,
                                                                                  _toPasswordStr(oldPassword),
                                                                                  _toPasswordStr(newPassword));
        return to_ckmc_error(ret);
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
 int ckmc_reset_user_password(uid_t user, const char *newPassword)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        auto control = CKM::Control::create();
        int ret = control->resetUserPassword(user, _toPasswordStr(newPassword));
        return to_ckmc_error(ret);
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
 int ckmc_allow_access_by_adm(uid_t user, const char *owner, const char *alias,
                                                         const char *accessor, ckmc_access_right_e granted)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        LogWarning("DEPRECATION WARNING: " << __func__ << "() is deprecated and will be "
                           "removed from next release. Use ckmc_set_permission_by_adm() instead.");
 
@@ -99,24 +121,32 @@ int ckmc_allow_access_by_adm(uid_t user, const char *owner, const char *alias,
        return ckmc_set_permission_by_adm(user,
                                                                          CKM::AliasSupport::merge(CKM::ClientId(owner), CKM::Name(alias)).c_str(), accessor,
                                                                          permissionMask);
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
 int ckmc_set_permission_by_adm(uid_t user, const char *alias,
                                                           const char *accessor, int permissions)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        if (!alias || !accessor)
                return CKMC_ERROR_INVALID_PARAMETER;
 
        auto control = CKM::Control::create();
        return to_ckmc_error(control->setPermission(user, alias, accessor,
                                                 permissions));
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
 int ckmc_deny_access_by_adm(uid_t user, const char *owner, const char *alias,
                                                        const char *accessor)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        LogWarning("DEPRECATION WARNING: " << __func__ << "() is deprecated and will be "
                           "removed from next release. Use ckmc_set_permission_by_adm() instead.");
 
@@ -130,4 +160,6 @@ int ckmc_deny_access_by_adm(uid_t user, const char *owner, const char *alias,
                                                         CKM::AliasSupport::merge(CKM::ClientId(owner), CKM::Name(alias)).c_str(),
                                                         accessor,
                                                         CKM::Permission::NONE));
+
+       EXCEPTION_GUARD_END
 }
index 3e1ca0a..f79c2e1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) 2014 - 2020 Samsung Electronics Co., Ltd. All rights reserved
+ *  Copyright (c) 2014-2020 Samsung Electronics Co., Ltd. All rights reserved
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -239,6 +239,8 @@ int ckmc_cert_new(unsigned char *raw_cert, size_t cert_size,
 KEY_MANAGER_CAPI
 int ckmc_load_cert_from_file(const char *file_path, ckmc_cert_s **cert)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        FILE *fp = fopen(file_path, "r");
 
        if (fp == NULL)
@@ -266,6 +268,8 @@ int ckmc_load_cert_from_file(const char *file_path, ckmc_cert_s **cert)
        X509_free(pcert);
 
        return ret;
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
@@ -312,6 +316,8 @@ int ckmc_load_from_pkcs12_file(const char *file_path, const char *passphrase,
                                                           ckmc_key_s **private_key, ckmc_cert_s **ckmcert,
                                                           ckmc_cert_list_s **ca_cert_list)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        class Pkcs12Converter {
        private:
                FILE *fp_in;
@@ -496,6 +502,8 @@ int ckmc_load_from_pkcs12_file(const char *file_path, const char *passphrase,
        *ca_cert_list = converter.retCaCertList;
 
        return CKMC_ERROR_NONE;
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
@@ -708,12 +716,16 @@ int ckmc_param_list_set_integer(ckmc_param_list_h params,
                                                                ckmc_param_name_e name,
                                                                uint64_t value)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        if (!params)
                return CKMC_ERROR_INVALID_PARAMETER;
 
        CKM::CryptoAlgorithm *algo = reinterpret_cast<CKM::CryptoAlgorithm *>(params);
        bool ret = algo->setParam(static_cast<CKM::ParamName>(name), value);
        return (ret ? CKMC_ERROR_NONE : CKMC_ERROR_INVALID_PARAMETER);
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
@@ -721,6 +733,8 @@ int ckmc_param_list_set_buffer(ckmc_param_list_h params,
                                                           ckmc_param_name_e name,
                                                           const ckmc_raw_buffer_s *buffer)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        if (!params || !buffer || !buffer->data || buffer->size == 0)
                return CKMC_ERROR_INVALID_PARAMETER;
 
@@ -728,6 +742,8 @@ int ckmc_param_list_set_buffer(ckmc_param_list_h params,
        CKM::RawBuffer b(buffer->data, buffer->data + buffer->size);
        bool ret =  algo->setParam(static_cast<CKM::ParamName>(name), b);
        return (ret ? CKMC_ERROR_NONE : CKMC_ERROR_INVALID_PARAMETER);
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI
@@ -752,6 +768,8 @@ int ckmc_param_list_get_buffer(ckmc_param_list_h params,
                                                           ckmc_param_name_e name,
                                                           ckmc_raw_buffer_s **ppbuffer)
 {
+       EXCEPTION_GUARD_START_CAPI
+
        if (!params || !ppbuffer || *ppbuffer)
                return CKMC_ERROR_INVALID_PARAMETER;
 
@@ -763,6 +781,8 @@ int ckmc_param_list_get_buffer(ckmc_param_list_h params,
                return CKMC_ERROR_INVALID_PARAMETER;
 
        return ckmc_buffer_new(value.data(), value.size(), ppbuffer);
+
+       EXCEPTION_GUARD_END
 }
 
 KEY_MANAGER_CAPI