diff --git a/Userland/Libraries/LibC/string.cpp b/Userland/Libraries/LibC/string.cpp index 25495a0a60..093e77c871 100644 --- a/Userland/Libraries/LibC/string.cpp +++ b/Userland/Libraries/LibC/string.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2021-2022, Brian Gianforcaro * * SPDX-License-Identifier: BSD-2-Clause */ @@ -121,6 +122,11 @@ int memcmp(const void* v1, const void* v2, size_t n) return 0; } +int timingsafe_memcmp(const void* b1, const void* b2, size_t len) +{ + return AK::timing_safe_compare(b1, b2, len) ? 1 : 0; +} + // https://pubs.opengroup.org/onlinepubs/9699919799/functions/memcpy.html void* memcpy(void* dest_ptr, const void* src_ptr, size_t n) { diff --git a/Userland/Libraries/LibC/string.h b/Userland/Libraries/LibC/string.h index b1052cf0c4..c58ee96836 100644 --- a/Userland/Libraries/LibC/string.h +++ b/Userland/Libraries/LibC/string.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2021-2022, Brian Gianforcaro * * SPDX-License-Identifier: BSD-2-Clause */ @@ -23,6 +24,7 @@ int strcmp(const char*, const char*); int strncmp(const char*, const char*, size_t); int memcmp(const void*, const void*, size_t); +int timingsafe_memcmp(const void*, const void*, size_t); void* memcpy(void*, const void*, size_t); void* memmove(void*, const void*, size_t); void* memchr(const void*, int c, size_t);