Send OPENSSL_issetugid() straight to hell, no final cigarette.
authorderaadt <deraadt@openbsd.org>
Sat, 11 Apr 2015 16:16:15 +0000 (16:16 +0000)
committerderaadt <deraadt@openbsd.org>
Sat, 11 Apr 2015 16:16:15 +0000 (16:16 +0000)
The issetugid() API is supposed to make a strong promise where "0
means it is safe to look at the environment".  Way back in the past
someone on the OpenSSL team responded to the environment access danger
by creating a wrapper called OPENSSL_issetugid, and went to use it a
number of places.  However, by default on systems lacking true
issetugid(), OPENSSL_issetugid returns 0.  0 indicating safely.  False
safety.  Which means OPENSSL_issetugid() fails to make any sort of
promise about safety, in fact it is just the opposite.

Can you believe the OpenSSL team?

This nastiness was noticed over the years, however noone could gain traction
and get it fixed in OpenSSL.  Also see a paragraph about this in
http://www.tedunangst.com/flak/post/worst-common-denominator-programming

ok jsing

lib/libcrypto/crypto.h
lib/libcrypto/crypto/Makefile
lib/libcrypto/crypto/shlib_version
lib/libcrypto/shlib_version
lib/libcrypto/uid.c [deleted file]
lib/libssl/src/crypto/crypto.h
lib/libssl/src/crypto/uid.c [deleted file]

index 27b7f3f..4012f1c 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: crypto.h,v 1.33 2015/02/07 13:19:15 doug Exp $ */
+/* $OpenBSD: crypto.h,v 1.34 2015/04/11 16:16:15 deraadt Exp $ */
 /* ====================================================================
  * Copyright (c) 1998-2006 The OpenSSL Project.  All rights reserved.
  *
@@ -348,8 +348,6 @@ int CRYPTO_is_mem_check_on(void);
 const char *SSLeay_version(int type);
 unsigned long SSLeay(void);
 
-int OPENSSL_issetugid(void);
-
 /* An opaque type representing an implementation of "ex_data" support */
 typedef struct st_CRYPTO_EX_DATA_IMPL  CRYPTO_EX_DATA_IMPL;
 /* Return an opaque pointer to the current "ex_data" implementation */
index 4e8f489..a4e65fd 100644 (file)
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.56 2015/02/10 13:28:17 jsing Exp $
+# $OpenBSD: Makefile,v 1.57 2015/04/11 16:16:15 deraadt Exp $
 
 LIB=   crypto
 
@@ -27,7 +27,7 @@ CFLAGS+= -I${LCRYPTO_SRC}/modes -I${LCRYPTO_SRC}/asn1 -I${LCRYPTO_SRC}/evp
 
 # crypto/
 SRCS+= cryptlib.c malloc-wrapper.c mem_dbg.c cversion.c ex_data.c cpt_err.c
-SRCS+= uid.c o_time.c o_str.c o_init.c
+SRCS+= o_time.c o_str.c o_init.c
 SRCS+= mem_clr.c
 
 # aes/
diff --git a/lib/libcrypto/uid.c b/lib/libcrypto/uid.c
deleted file mode 100644 (file)
index c1bd927..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/* $OpenBSD: uid.c,v 1.8 2014/06/12 15:49:27 deraadt Exp $ */
-/*
- * Written by Theo de Raadt.  Public domain.
- */
-
-#include <unistd.h>
-
-int
-OPENSSL_issetugid(void)
-{
-       return issetugid();
-}
index 27b7f3f..4012f1c 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: crypto.h,v 1.33 2015/02/07 13:19:15 doug Exp $ */
+/* $OpenBSD: crypto.h,v 1.34 2015/04/11 16:16:15 deraadt Exp $ */
 /* ====================================================================
  * Copyright (c) 1998-2006 The OpenSSL Project.  All rights reserved.
  *
@@ -348,8 +348,6 @@ int CRYPTO_is_mem_check_on(void);
 const char *SSLeay_version(int type);
 unsigned long SSLeay(void);
 
-int OPENSSL_issetugid(void);
-
 /* An opaque type representing an implementation of "ex_data" support */
 typedef struct st_CRYPTO_EX_DATA_IMPL  CRYPTO_EX_DATA_IMPL;
 /* Return an opaque pointer to the current "ex_data" implementation */
diff --git a/lib/libssl/src/crypto/uid.c b/lib/libssl/src/crypto/uid.c
deleted file mode 100644 (file)
index c1bd927..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/* $OpenBSD: uid.c,v 1.8 2014/06/12 15:49:27 deraadt Exp $ */
-/*
- * Written by Theo de Raadt.  Public domain.
- */
-
-#include <unistd.h>
-
-int
-OPENSSL_issetugid(void)
-{
-       return issetugid();
-}