diff options
author | Florian Weimer <fweimer@redhat.com> | 2023-11-22 08:38:33 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2023-11-22 08:38:33 +0100 |
commit | 5d7f1bce7d8eea31f4baeb68bcc3124b35acc751 (patch) | |
tree | e9a4a7908362d7e08cdb8a2444ce262e2c242f8e | |
parent | 780c33920281c5d5cc42a1e578bdc9218e675405 (diff) | |
download | glibc-5d7f1bce7d8eea31f4baeb68bcc3124b35acc751.tar.gz glibc-5d7f1bce7d8eea31f4baeb68bcc3124b35acc751.tar.xz glibc-5d7f1bce7d8eea31f4baeb68bcc3124b35acc751.zip |
posix: Revert the removal of the crypt prototype from <unistd.h>
Many applications still rely on this prototype. Rebuilds without this prototype result in an implicit function declaration, which can introduce security vulnerabilities due to 32-bit pointer truncation.
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | posix/unistd.h | 13 |
2 files changed, 17 insertions, 1 deletions
diff --git a/NEWS b/NEWS index 139cfef1b0..8c1c149f91 100644 --- a/NEWS +++ b/NEWS @@ -52,7 +52,10 @@ Deprecated and removed features, and other changes affecting compatibility: * libcrypt has been removed from the GNU C Library. The configure options "--enable-crypt" and "--enable-nss-crypt" are no longer available. <crypt.h>, libcrypt.a, and libcrypt.so.1 will not be - installed, and <unistd.h> will not declare the crypt function. + installed. For now <unistd.h> continues to declare the crypt + function by default, to avoid introducing vulnerabilities into + existing applications due to a missing prototype. This declaration + is deprecated and may be removed in a future glibc release. The replacement for libcrypt is libxcrypt, maintained separately from GNU libc, but available under compatible licensing terms, and providing diff --git a/posix/unistd.h b/posix/unistd.h index 1f9cd8cbf0..5b91ad4aaa 100644 --- a/posix/unistd.h +++ b/posix/unistd.h @@ -1150,6 +1150,19 @@ ssize_t copy_file_range (int __infd, __off64_t *__pinoff, extern int fdatasync (int __fildes); #endif /* Use POSIX199309 */ +#ifdef __USE_MISC +/* One-way hash PHRASE, returning a string suitable for storage in the + user database. SALT selects the one-way function to use, and + ensures that no two users' hashes are the same, even if they use + the same passphrase. The return value points to static storage + which will be overwritten by the next call to crypt. + + This declaration is deprecated; applications should include + <crypt.h> instead. */ +extern char *crypt (const char *__key, const char *__salt) + __THROW __nonnull ((1, 2)); +#endif + #ifdef __USE_XOPEN /* Swab pairs bytes in the first N bytes of the area pointed to by FROM and copy the result to TO. The value of TO must not be in the |