net: lib: tls_credentials: return size required
If either no buffer is provided or the size of it is too small, return the required length. Signed-off-by: Pete Skeggs <peter.skeggs@nordicsemi.no>
This commit is contained in:
parent
b33b3b17f7
commit
6ec5729a3d
2 changed files with 13 additions and 0 deletions
|
|
@ -107,6 +107,7 @@ int tls_credential_add(sec_tag_t tag, enum tls_credential_type type,
|
||||||
* @retval -EACCES Access to the TLS credential subsystem was denied.
|
* @retval -EACCES Access to the TLS credential subsystem was denied.
|
||||||
* @retval -ENOENT Requested TLS credential was not found.
|
* @retval -ENOENT Requested TLS credential was not found.
|
||||||
* @retval -EFBIG Requested TLS credential does not fit in the buffer provided.
|
* @retval -EFBIG Requested TLS credential does not fit in the buffer provided.
|
||||||
|
* Check *credlen for size required.
|
||||||
*/
|
*/
|
||||||
int tls_credential_get(sec_tag_t tag, enum tls_credential_type type,
|
int tls_credential_get(sec_tag_t tag, enum tls_credential_type type,
|
||||||
void *cred, size_t *credlen);
|
void *cred, size_t *credlen);
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@
|
||||||
#include "tls_internal.h"
|
#include "tls_internal.h"
|
||||||
#include "tls_credentials_digest_raw.h"
|
#include "tls_credentials_digest_raw.h"
|
||||||
|
|
||||||
|
#include <zephyr/logging/log.h>
|
||||||
|
|
||||||
|
LOG_MODULE_DECLARE(tls_credentials,
|
||||||
|
CONFIG_TLS_CREDENTIALS_LOG_LEVEL);
|
||||||
|
|
||||||
/* Global pool of credentials shared among TLS contexts. */
|
/* Global pool of credentials shared among TLS contexts. */
|
||||||
static struct tls_credential credentials[CONFIG_TLS_MAX_CREDENTIALS_NUMBER];
|
static struct tls_credential credentials[CONFIG_TLS_MAX_CREDENTIALS_NUMBER];
|
||||||
|
|
||||||
|
|
@ -158,11 +163,18 @@ int tls_credential_get(sec_tag_t tag, enum tls_credential_type type,
|
||||||
credential = credential_get(tag, type);
|
credential = credential_get(tag, type);
|
||||||
if (credential == NULL) {
|
if (credential == NULL) {
|
||||||
ret = -ENOENT;
|
ret = -ENOENT;
|
||||||
|
*credlen = 0;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (credential->len > *credlen) {
|
if (credential->len > *credlen) {
|
||||||
ret = -EFBIG;
|
ret = -EFBIG;
|
||||||
|
LOG_DBG("Not enough room in the credential buffer to "
|
||||||
|
"retrieve credential with sectag %d and type %d. "
|
||||||
|
"Increase TLS_CREDENTIALS_SHELL_MAX_CRED_LEN "
|
||||||
|
">= %d.\n",
|
||||||
|
tag, (int)type, (int)credential->len);
|
||||||
|
*credlen = credential->len;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue