Loading crypto/err/err.c +21 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <openssl/opensslconf.h> #include "internal/thread_once.h" #include "internal/ctype.h" #include "internal/constant_time_locl.h" static int err_load_strings(const ERR_STRING_DATA *str); Loading Loading @@ -878,3 +879,23 @@ int ERR_clear_last_mark(void) es->err_flags[top] &= ~ERR_FLAG_MARK; return 1; } void err_clear_last_constant_time(int clear) { ERR_STATE *es; int top; es = ERR_get_state(); if (es == NULL) return; top = es->top; es->err_flags[top] &= ~(0 - clear); es->err_buffer[top] &= ~(0UL - clear); es->err_file[top] = (const char *)((uintptr_t)es->err_file[top] & ~((uintptr_t)0 - clear)); es->err_line[top] |= 0 - clear; es->top = (top + ERR_NUM_ERRORS - clear) % ERR_NUM_ERRORS; } include/internal/constant_time_locl.h +6 −0 Original line number Diff line number Diff line Loading @@ -324,4 +324,10 @@ static ossl_inline void constant_time_lookup(void *out, } } /* * Expected usage pattern is to unconditionally set error and then * wipe it if there was no actual error. |clear| is 1 or 0. */ void err_clear_last_constant_time(int clear); #endif /* HEADER_CONSTANT_TIME_LOCL_H */ Loading
crypto/err/err.c +21 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <openssl/opensslconf.h> #include "internal/thread_once.h" #include "internal/ctype.h" #include "internal/constant_time_locl.h" static int err_load_strings(const ERR_STRING_DATA *str); Loading Loading @@ -878,3 +879,23 @@ int ERR_clear_last_mark(void) es->err_flags[top] &= ~ERR_FLAG_MARK; return 1; } void err_clear_last_constant_time(int clear) { ERR_STATE *es; int top; es = ERR_get_state(); if (es == NULL) return; top = es->top; es->err_flags[top] &= ~(0 - clear); es->err_buffer[top] &= ~(0UL - clear); es->err_file[top] = (const char *)((uintptr_t)es->err_file[top] & ~((uintptr_t)0 - clear)); es->err_line[top] |= 0 - clear; es->top = (top + ERR_NUM_ERRORS - clear) % ERR_NUM_ERRORS; }
include/internal/constant_time_locl.h +6 −0 Original line number Diff line number Diff line Loading @@ -324,4 +324,10 @@ static ossl_inline void constant_time_lookup(void *out, } } /* * Expected usage pattern is to unconditionally set error and then * wipe it if there was no actual error. |clear| is 1 or 0. */ void err_clear_last_constant_time(int clear); #endif /* HEADER_CONSTANT_TIME_LOCL_H */