Provide BIO_get_new_index().
authorjsing <jsing@openbsd.org>
Tue, 20 Feb 2018 17:15:27 +0000 (17:15 +0000)
committerjsing <jsing@openbsd.org>
Tue, 20 Feb 2018 17:15:27 +0000 (17:15 +0000)
Based on BoringSSL.

lib/libcrypto/Symbols.list
lib/libcrypto/bio/bio.h
lib/libcrypto/bio/bio_lib.c

index 23030bd..2252220 100644 (file)
@@ -280,6 +280,7 @@ BIO_get_data
 BIO_get_ex_data
 BIO_get_ex_new_index
 BIO_get_host_ip
+BIO_get_new_index
 BIO_get_port
 BIO_get_retry_BIO
 BIO_get_retry_reason
index 8efeba2..1d34f08 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: bio.h,v 1.33 2018/02/18 12:59:06 tb Exp $ */
+/* $OpenBSD: bio.h,v 1.34 2018/02/20 17:15:27 jsing Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -103,6 +103,12 @@ extern "C" {
 #define BIO_TYPE_FILTER                0x0200
 #define BIO_TYPE_SOURCE_SINK   0x0400
 
+/*
+ * BIO_TYPE_START is the first user-allocated BIO type. No pre-defined type,
+ * flag bits aside, may exceed this value.
+ */
+#define BIO_TYPE_START 128
+
 /* BIO_FILENAME_READ|BIO_CLOSE to open or close on free.
  * BIO_set_fp(in,stdin,BIO_NOCLOSE); */
 #define BIO_NOCLOSE            0x00
@@ -580,6 +586,7 @@ int
 BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix,
 asn1_ps_func **psuffix_free);
 
+int BIO_get_new_index(void);
 BIO_METHOD *BIO_s_file(void );
 BIO *BIO_new_file(const char *filename, const char *mode);
 BIO *BIO_new_fp(FILE *stream, int close_flag);
index 4e5405d..b2acd01 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: bio_lib.c,v 1.24 2018/02/18 12:58:25 tb Exp $ */
+/* $OpenBSD: bio_lib.c,v 1.25 2018/02/20 17:15:27 jsing Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
 #include <openssl/err.h>
 #include <openssl/stack.h>
 
+int
+BIO_get_new_index(void)
+{
+       static int bio_type_index = BIO_TYPE_START;
+       int index;
+
+       /* The index will collide with the BIO flag bits if it exceeds 255. */
+       index = CRYPTO_add(&bio_type_index, 1, CRYPTO_LOCK_BIO);
+       if (index > 255)
+               return -1;
+
+       return index;
+}
+
 BIO *
 BIO_new(BIO_METHOD *method)
 {