about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2016-02-16 17:38:07 -0500
committerRich Felker <dalias@aerifal.cx>2016-02-16 17:38:07 -0500
commitcf115059ba0ecd611008c89c78c37b62f8e6d6af (patch)
treeb54cd9ffab93bfe1eafcf6c084b5cc2fec9397ed /src
parentef2b5e9f13a7f216d6d64aeccc6b33c1262faece (diff)
downloadmusl-cf115059ba0ecd611008c89c78c37b62f8e6d6af.tar.gz
musl-cf115059ba0ecd611008c89c78c37b62f8e6d6af.tar.xz
musl-cf115059ba0ecd611008c89c78c37b62f8e6d6af.zip
in crypt-sha*, reject excessive rounds as error rather than clamping
the reference implementation clamps rounds to [1000,999999999]. we
further limited rounds to at most 9999999 as a defense against extreme
run times, but wrongly clamped instead of treating out-of-bounds
values as an error, thereby producing implementation-specific hash
results. fixing this should not break anything since values of rounds
this high are not useful anyway.
Diffstat (limited to 'src')
-rw-r--r--src/crypt/crypt_sha256.c2
-rw-r--r--src/crypt/crypt_sha512.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/src/crypt/crypt_sha256.c b/src/crypt/crypt_sha256.c
index d5f0b786..e885dc68 100644
--- a/src/crypt/crypt_sha256.c
+++ b/src/crypt/crypt_sha256.c
@@ -230,7 +230,7 @@ static char *sha256crypt(const char *key, const char *setting, char *output)
 		if (u < ROUNDS_MIN)
 			r = ROUNDS_MIN;
 		else if (u > ROUNDS_MAX)
-			r = ROUNDS_MAX;
+			return 0;
 		else
 			r = u;
 		/* needed when rounds is zero prefixed or out of bounds */
diff --git a/src/crypt/crypt_sha512.c b/src/crypt/crypt_sha512.c
index 1294e98b..39970caf 100644
--- a/src/crypt/crypt_sha512.c
+++ b/src/crypt/crypt_sha512.c
@@ -252,7 +252,7 @@ static char *sha512crypt(const char *key, const char *setting, char *output)
 		if (u < ROUNDS_MIN)
 			r = ROUNDS_MIN;
 		else if (u > ROUNDS_MAX)
-			r = ROUNDS_MAX;
+			return 0;
 		else
 			r = u;
 		/* needed when rounds is zero prefixed or out of bounds */