sync with OpenBSD -current
This commit is contained in:
parent
bf0d2e284c
commit
c0feaae94d
70 changed files with 792 additions and 1025 deletions
|
@ -1,4 +1,4 @@
|
||||||
# $OpenBSD: bgpd.conf,v 1.24 2024/07/24 19:28:37 job Exp $
|
# $OpenBSD: bgpd.conf,v 1.25 2024/08/29 12:58:57 claudio Exp $
|
||||||
# example bgpd configuration file, see bgpd.conf(5)
|
# example bgpd configuration file, see bgpd.conf(5)
|
||||||
|
|
||||||
# define our own ASN as a macro
|
# define our own ASN as a macro
|
||||||
|
@ -39,7 +39,7 @@ prefix-set bogons {
|
||||||
2001:db8::/32 or-longer # docu range [RFC3849]
|
2001:db8::/32 or-longer # docu range [RFC3849]
|
||||||
2002::/16 or-longer # 6to4 anycast relay [RFC7526]
|
2002::/16 or-longer # 6to4 anycast relay [RFC7526]
|
||||||
3ffe::/16 or-longer # old 6bone
|
3ffe::/16 or-longer # old 6bone
|
||||||
3fff::/20 or-longer # docu range [draft-ietf-v6ops-rfc3849-update]
|
3fff::/20 or-longer # docu range [RFC9637]
|
||||||
5f00::/16 or-longer # segment routing SRv6 SIDs [RFC9602]
|
5f00::/16 or-longer # segment routing SRv6 SIDs [RFC9602]
|
||||||
fc00::/7 or-longer # unique local unicast
|
fc00::/7 or-longer # unique local unicast
|
||||||
fe80::/10 or-longer # link local unicast
|
fe80::/10 or-longer # link local unicast
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: conf.c,v 1.14 2022/08/08 17:57:05 op Exp $ */
|
/* $OpenBSD: conf.c,v 1.15 2024/08/28 15:51:01 op Exp $ */
|
||||||
/* David Leonard <d@openbsd.org>, 1999. Public domain. */
|
/* David Leonard <d@openbsd.org>, 1999. Public domain. */
|
||||||
|
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
|
@ -252,7 +252,7 @@ load_config(FILE *f, char *fnm)
|
||||||
size_t linesize = 0;
|
size_t linesize = 0;
|
||||||
ssize_t linelen;
|
ssize_t linelen;
|
||||||
|
|
||||||
while ((linelen = getline(&line, &linesize, stdin)) != -1) {
|
while ((linelen = getline(&line, &linesize, f)) != -1) {
|
||||||
lineno++;
|
lineno++;
|
||||||
if (line[linelen - 1] == '\n')
|
if (line[linelen - 1] == '\n')
|
||||||
line[linelen - 1] = '\0';
|
line[linelen - 1] = '\0';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $OpenBSD: Makefile,v 1.202 2024/08/10 06:41:49 tb Exp $
|
# $OpenBSD: Makefile,v 1.203 2024/08/28 07:15:04 tb Exp $
|
||||||
|
|
||||||
LIB= crypto
|
LIB= crypto
|
||||||
LIBREBUILD=y
|
LIBREBUILD=y
|
||||||
|
@ -589,6 +589,7 @@ SRCS+= x509_purp.c
|
||||||
SRCS+= x509_r2x.c
|
SRCS+= x509_r2x.c
|
||||||
SRCS+= x509_req.c
|
SRCS+= x509_req.c
|
||||||
SRCS+= x509_set.c
|
SRCS+= x509_set.c
|
||||||
|
SRCS+= x509_siginfo.c
|
||||||
SRCS+= x509_skey.c
|
SRCS+= x509_skey.c
|
||||||
SRCS+= x509_trs.c
|
SRCS+= x509_trs.c
|
||||||
SRCS+= x509_txt.c
|
SRCS+= x509_txt.c
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: arm64cap.c,v 1.3 2023/07/26 09:57:34 jsing Exp $ */
|
/* $OpenBSD: arm64cap.c,v 1.4 2024/08/29 03:30:05 deraadt Exp $ */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -63,7 +63,11 @@ OPENSSL_cpuid_setup(void)
|
||||||
static sigset_t all_masked;
|
static sigset_t all_masked;
|
||||||
|
|
||||||
static sigjmp_buf ill_jmp;
|
static sigjmp_buf ill_jmp;
|
||||||
static void ill_handler (int sig) { siglongjmp(ill_jmp, sig);
|
|
||||||
|
static void
|
||||||
|
ill_handler(int sig)
|
||||||
|
{
|
||||||
|
siglongjmp(ill_jmp, sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: armcap.c,v 1.2 2023/07/26 09:57:34 jsing Exp $ */
|
/* $OpenBSD: armcap.c,v 1.3 2024/08/29 03:30:05 deraadt Exp $ */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -14,7 +14,11 @@ unsigned int OPENSSL_armcap_P;
|
||||||
static sigset_t all_masked;
|
static sigset_t all_masked;
|
||||||
|
|
||||||
static sigjmp_buf ill_jmp;
|
static sigjmp_buf ill_jmp;
|
||||||
static void ill_handler (int sig) { siglongjmp(ill_jmp, sig);
|
|
||||||
|
static void
|
||||||
|
ill_handler(int sig)
|
||||||
|
{
|
||||||
|
siglongjmp(ill_jmp, sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: t_x509.c,v 1.45 2024/04/09 13:55:02 beck Exp $ */
|
/* $OpenBSD: t_x509.c,v 1.46 2024/08/28 06:17:06 tb Exp $ */
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -56,6 +56,7 @@
|
||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include <openssl/opensslconf.h>
|
#include <openssl/opensslconf.h>
|
||||||
|
@ -155,8 +156,21 @@ X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, unsigned long cflag)
|
||||||
|
|
||||||
bs = X509_get_serialNumber(x);
|
bs = X509_get_serialNumber(x);
|
||||||
l = -1;
|
l = -1;
|
||||||
if (bs->length <= (int)sizeof(long))
|
|
||||||
l = ASN1_INTEGER_get(bs);
|
/*
|
||||||
|
* For historical reasons, non-negative serial numbers are
|
||||||
|
* printed in decimal as long as they fit into a long. Using
|
||||||
|
* ASN1_INTEGER_get_uint64() avoids an error on the stack for
|
||||||
|
* numbers between LONG_MAX and ULONG_MAX. Otherwise fall back
|
||||||
|
* to hexadecimal, also for numbers that are non-conformant
|
||||||
|
* (negative or larger than 2^159 - 1).
|
||||||
|
*/
|
||||||
|
if (bs->length <= sizeof(long) && bs->type == V_ASN1_INTEGER) {
|
||||||
|
uint64_t u64;
|
||||||
|
|
||||||
|
if (ASN1_INTEGER_get_uint64(&u64, bs) && u64 <= LONG_MAX)
|
||||||
|
l = (long)u64;
|
||||||
|
}
|
||||||
if (l >= 0) {
|
if (l >= 0) {
|
||||||
if (BIO_printf(bp, " %ld (0x%lx)\n", l, l) <= 0)
|
if (BIO_printf(bp, " %ld (0x%lx)\n", l, l) <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: conf_def.c,v 1.36 2024/08/24 12:08:49 tb Exp $ */
|
/* $OpenBSD: conf_def.c,v 1.37 2024/08/28 15:48:33 tb Exp $ */
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -85,7 +85,7 @@ def_create(CONF_METHOD *meth)
|
||||||
{
|
{
|
||||||
CONF *ret;
|
CONF *ret;
|
||||||
|
|
||||||
ret = malloc(sizeof(CONF) + sizeof(unsigned short *));
|
ret = calloc(1, sizeof(CONF) + sizeof(unsigned short *));
|
||||||
if (ret)
|
if (ret)
|
||||||
if (meth->init(ret) == 0) {
|
if (meth->init(ret) == 0) {
|
||||||
free(ret);
|
free(ret);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: dh_ameth.c,v 1.40 2024/01/04 17:01:26 tb Exp $ */
|
/* $OpenBSD: dh_ameth.c,v 1.41 2024/08/29 16:58:19 tb Exp $ */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 2006.
|
* project 2006.
|
||||||
*/
|
*/
|
||||||
|
@ -496,32 +496,6 @@ DHparams_print_fp(FILE *fp, const DH *x)
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(DHparams_print_fp);
|
LCRYPTO_ALIAS(DHparams_print_fp);
|
||||||
|
|
||||||
static int
|
|
||||||
dh_pkey_public_check(const EVP_PKEY *pkey)
|
|
||||||
{
|
|
||||||
DH *dh = pkey->pkey.dh;
|
|
||||||
|
|
||||||
if (dh->pub_key == NULL) {
|
|
||||||
DHerror(DH_R_MISSING_PUBKEY);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return DH_check_pub_key_ex(dh, dh->pub_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
dh_pkey_param_check(const EVP_PKEY *pkey)
|
|
||||||
{
|
|
||||||
DH *dh = pkey->pkey.dh;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* It would have made more sense to support EVP_PKEY_check() for DH
|
|
||||||
* keys and call DH_check_ex() there and keeping this as a wrapper
|
|
||||||
* for DH_param_check_ex(). We follow OpenSSL's choice.
|
|
||||||
*/
|
|
||||||
return DH_check_ex(dh);
|
|
||||||
}
|
|
||||||
|
|
||||||
const EVP_PKEY_ASN1_METHOD dh_asn1_meth = {
|
const EVP_PKEY_ASN1_METHOD dh_asn1_meth = {
|
||||||
.base_method = &dh_asn1_meth,
|
.base_method = &dh_asn1_meth,
|
||||||
.pkey_id = EVP_PKEY_DH,
|
.pkey_id = EVP_PKEY_DH,
|
||||||
|
@ -550,8 +524,4 @@ const EVP_PKEY_ASN1_METHOD dh_asn1_meth = {
|
||||||
.param_print = dh_param_print,
|
.param_print = dh_param_print,
|
||||||
|
|
||||||
.pkey_free = dh_free,
|
.pkey_free = dh_free,
|
||||||
|
|
||||||
.pkey_check = NULL,
|
|
||||||
.pkey_public_check = dh_pkey_public_check,
|
|
||||||
.pkey_param_check = dh_pkey_param_check,
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: ec_ameth.c,v 1.68 2024/05/10 05:12:03 tb Exp $ */
|
/* $OpenBSD: ec_ameth.c,v 1.69 2024/08/29 16:58:19 tb Exp $ */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 2006.
|
* project 2006.
|
||||||
*/
|
*/
|
||||||
|
@ -689,41 +689,6 @@ ec_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
ec_pkey_check(const EVP_PKEY *pkey)
|
|
||||||
{
|
|
||||||
EC_KEY *eckey = pkey->pkey.ec;
|
|
||||||
|
|
||||||
if (eckey->priv_key == NULL) {
|
|
||||||
ECerror(EC_R_MISSING_PRIVATE_KEY);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EC_KEY_check_key(eckey);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ec_pkey_public_check(const EVP_PKEY *pkey)
|
|
||||||
{
|
|
||||||
EC_KEY *eckey = pkey->pkey.ec;
|
|
||||||
|
|
||||||
/* This also checks the private key, but oh, well... */
|
|
||||||
return EC_KEY_check_key(eckey);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ec_pkey_param_check(const EVP_PKEY *pkey)
|
|
||||||
{
|
|
||||||
EC_KEY *eckey = pkey->pkey.ec;
|
|
||||||
|
|
||||||
if (eckey->group == NULL) {
|
|
||||||
ECerror(EC_R_MISSING_PARAMETERS);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EC_GROUP_check(eckey->group, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_CMS
|
#ifndef OPENSSL_NO_CMS
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1092,8 +1057,4 @@ const EVP_PKEY_ASN1_METHOD eckey_asn1_meth = {
|
||||||
.pkey_ctrl = ec_pkey_ctrl,
|
.pkey_ctrl = ec_pkey_ctrl,
|
||||||
.old_priv_decode = old_ec_priv_decode,
|
.old_priv_decode = old_ec_priv_decode,
|
||||||
.old_priv_encode = old_ec_priv_encode,
|
.old_priv_encode = old_ec_priv_encode,
|
||||||
|
|
||||||
.pkey_check = ec_pkey_check,
|
|
||||||
.pkey_public_check = ec_pkey_public_check,
|
|
||||||
.pkey_param_check = ec_pkey_param_check,
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: ecx_methods.c,v 1.13 2024/04/02 04:04:07 tb Exp $ */
|
/* $OpenBSD: ecx_methods.c,v 1.14 2024/08/28 07:15:04 tb Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022 Joel Sing <jsing@openbsd.org>
|
* Copyright (c) 2022 Joel Sing <jsing@openbsd.org>
|
||||||
*
|
*
|
||||||
|
@ -509,6 +509,24 @@ ecx_security_bits(const EVP_PKEY *pkey)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
ecx_signature_info(const X509_ALGOR *algor, int *md_nid, int *pkey_nid,
|
||||||
|
int *security_bits, uint32_t *flags)
|
||||||
|
{
|
||||||
|
const ASN1_OBJECT *aobj;
|
||||||
|
|
||||||
|
X509_ALGOR_get0(&aobj, NULL, NULL, algor);
|
||||||
|
if (OBJ_obj2nid(aobj) != EVP_PKEY_ED25519)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
*md_nid = NID_undef;
|
||||||
|
*pkey_nid = NID_ED25519;
|
||||||
|
*security_bits = ED25519_SECURITY_BITS;
|
||||||
|
*flags = X509_SIG_INFO_TLS | X509_SIG_INFO_VALID;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ecx_param_cmp(const EVP_PKEY *pkey1, const EVP_PKEY *pkey2)
|
ecx_param_cmp(const EVP_PKEY *pkey1, const EVP_PKEY *pkey2)
|
||||||
{
|
{
|
||||||
|
@ -929,6 +947,8 @@ const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth = {
|
||||||
.pkey_bits = ecx_bits,
|
.pkey_bits = ecx_bits,
|
||||||
.pkey_security_bits = ecx_security_bits,
|
.pkey_security_bits = ecx_security_bits,
|
||||||
|
|
||||||
|
.signature_info = ecx_signature_info,
|
||||||
|
|
||||||
.param_cmp = ecx_param_cmp,
|
.param_cmp = ecx_param_cmp,
|
||||||
|
|
||||||
.pkey_free = ecx_free,
|
.pkey_free = ecx_free,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: evp_local.h,v 1.23 2024/08/22 12:24:24 tb Exp $ */
|
/* $OpenBSD: evp_local.h,v 1.25 2024/08/29 16:58:19 tb Exp $ */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 2000.
|
* project 2000.
|
||||||
*/
|
*/
|
||||||
|
@ -112,6 +112,9 @@ struct evp_pkey_asn1_method_st {
|
||||||
int (*pkey_bits)(const EVP_PKEY *pk);
|
int (*pkey_bits)(const EVP_PKEY *pk);
|
||||||
int (*pkey_security_bits)(const EVP_PKEY *pk);
|
int (*pkey_security_bits)(const EVP_PKEY *pk);
|
||||||
|
|
||||||
|
int (*signature_info)(const X509_ALGOR *sig_alg, int *out_md_nid,
|
||||||
|
int *out_pkey_nid, int *out_security_bits, uint32_t *out_flags);
|
||||||
|
|
||||||
int (*param_decode)(EVP_PKEY *pkey, const unsigned char **pder,
|
int (*param_decode)(EVP_PKEY *pkey, const unsigned char **pder,
|
||||||
int derlen);
|
int derlen);
|
||||||
int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder);
|
int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder);
|
||||||
|
@ -137,10 +140,6 @@ struct evp_pkey_asn1_method_st {
|
||||||
int (*item_sign)(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
|
int (*item_sign)(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
|
||||||
X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig);
|
X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig);
|
||||||
|
|
||||||
int (*pkey_check)(const EVP_PKEY *pk);
|
|
||||||
int (*pkey_public_check)(const EVP_PKEY *pk);
|
|
||||||
int (*pkey_param_check)(const EVP_PKEY *pk);
|
|
||||||
|
|
||||||
int (*set_priv_key)(EVP_PKEY *pk, const unsigned char *private_key,
|
int (*set_priv_key)(EVP_PKEY *pk, const unsigned char *private_key,
|
||||||
size_t len);
|
size_t len);
|
||||||
int (*set_pub_key)(EVP_PKEY *pk, const unsigned char *public_key,
|
int (*set_pub_key)(EVP_PKEY *pk, const unsigned char *public_key,
|
||||||
|
@ -319,10 +318,6 @@ struct evp_pkey_method_st {
|
||||||
const unsigned char *tbs, size_t tbslen);
|
const unsigned char *tbs, size_t tbslen);
|
||||||
int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig,
|
int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig,
|
||||||
size_t siglen, const unsigned char *tbs, size_t tbslen);
|
size_t siglen, const unsigned char *tbs, size_t tbslen);
|
||||||
|
|
||||||
int (*check)(EVP_PKEY *pkey);
|
|
||||||
int (*public_check)(EVP_PKEY *pkey);
|
|
||||||
int (*param_check)(EVP_PKEY *pkey);
|
|
||||||
} /* EVP_PKEY_METHOD */;
|
} /* EVP_PKEY_METHOD */;
|
||||||
|
|
||||||
void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx);
|
void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: pmeth_gn.c,v 1.19 2024/04/17 08:24:11 tb Exp $ */
|
/* $OpenBSD: pmeth_gn.c,v 1.20 2024/08/29 16:58:19 tb Exp $ */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 2006.
|
* project 2006.
|
||||||
*/
|
*/
|
||||||
|
@ -226,68 +226,30 @@ merr:
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(EVP_PKEY_new_mac_key);
|
LCRYPTO_ALIAS(EVP_PKEY_new_mac_key);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX - remove the API below in the next bump.
|
||||||
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
EVP_PKEY_check(EVP_PKEY_CTX *ctx)
|
EVP_PKEY_check(EVP_PKEY_CTX *ctx)
|
||||||
{
|
{
|
||||||
EVP_PKEY *pkey;
|
EVPerror(ERR_R_DISABLED);
|
||||||
|
return -2;
|
||||||
if ((pkey = ctx->pkey) == NULL) {
|
|
||||||
EVPerror(EVP_R_NO_KEY_SET);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->pmeth->check != NULL)
|
|
||||||
return ctx->pmeth->check(pkey);
|
|
||||||
|
|
||||||
if (pkey->ameth == NULL || pkey->ameth->pkey_check == NULL) {
|
|
||||||
EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pkey->ameth->pkey_check(pkey);
|
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(EVP_PKEY_check);
|
LCRYPTO_ALIAS(EVP_PKEY_check);
|
||||||
|
|
||||||
int
|
int
|
||||||
EVP_PKEY_public_check(EVP_PKEY_CTX *ctx)
|
EVP_PKEY_public_check(EVP_PKEY_CTX *ctx)
|
||||||
{
|
{
|
||||||
EVP_PKEY *pkey;
|
EVPerror(ERR_R_DISABLED);
|
||||||
|
return -2;
|
||||||
if ((pkey = ctx->pkey) == NULL) {
|
|
||||||
EVPerror(EVP_R_NO_KEY_SET);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->pmeth->public_check != NULL)
|
|
||||||
return ctx->pmeth->public_check(pkey);
|
|
||||||
|
|
||||||
if (pkey->ameth == NULL || pkey->ameth->pkey_public_check == NULL) {
|
|
||||||
EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pkey->ameth->pkey_public_check(pkey);
|
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(EVP_PKEY_public_check);
|
LCRYPTO_ALIAS(EVP_PKEY_public_check);
|
||||||
|
|
||||||
int
|
int
|
||||||
EVP_PKEY_param_check(EVP_PKEY_CTX *ctx)
|
EVP_PKEY_param_check(EVP_PKEY_CTX *ctx)
|
||||||
{
|
{
|
||||||
EVP_PKEY *pkey;
|
EVPerror(ERR_R_DISABLED);
|
||||||
|
return -2;
|
||||||
if ((pkey = ctx->pkey) == NULL) {
|
|
||||||
EVPerror(EVP_R_NO_KEY_SET);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->pmeth->param_check != NULL)
|
|
||||||
return ctx->pmeth->param_check(pkey);
|
|
||||||
|
|
||||||
if (pkey->ameth == NULL || pkey->ameth->pkey_param_check == NULL) {
|
|
||||||
EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pkey->ameth->pkey_param_check(pkey);
|
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(EVP_PKEY_param_check);
|
LCRYPTO_ALIAS(EVP_PKEY_param_check);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: x509.h,v 1.9 2024/07/26 13:34:56 tb Exp $ */
|
/* $OpenBSD: x509.h,v 1.10 2024/08/28 08:41:18 tb Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022 Bob Beck <beck@openbsd.org>
|
* Copyright (c) 2022 Bob Beck <beck@openbsd.org>
|
||||||
*
|
*
|
||||||
|
@ -387,6 +387,7 @@ LCRYPTO_USED(X509_get_ex_data);
|
||||||
LCRYPTO_USED(i2d_X509_AUX);
|
LCRYPTO_USED(i2d_X509_AUX);
|
||||||
LCRYPTO_USED(d2i_X509_AUX);
|
LCRYPTO_USED(d2i_X509_AUX);
|
||||||
LCRYPTO_USED(i2d_re_X509_tbs);
|
LCRYPTO_USED(i2d_re_X509_tbs);
|
||||||
|
LCRYPTO_USED(X509_get_signature_info);
|
||||||
LCRYPTO_USED(X509_get0_signature);
|
LCRYPTO_USED(X509_get0_signature);
|
||||||
LCRYPTO_USED(X509_get_signature_nid);
|
LCRYPTO_USED(X509_get_signature_nid);
|
||||||
LCRYPTO_USED(X509_alias_set1);
|
LCRYPTO_USED(X509_alias_set1);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: x509v3.h,v 1.9 2024/07/08 17:01:54 beck Exp $ */
|
/* $OpenBSD: x509v3.h,v 1.12 2024/08/28 08:59:03 tb Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022 Bob Beck <beck@openbsd.org>
|
* Copyright (c) 2022 Bob Beck <beck@openbsd.org>
|
||||||
*
|
*
|
||||||
|
@ -139,17 +139,17 @@ LCRYPTO_USED(X509V3_EXT_REQ_add_nconf);
|
||||||
LCRYPTO_USED(X509V3_EXT_CRL_add_nconf);
|
LCRYPTO_USED(X509V3_EXT_CRL_add_nconf);
|
||||||
LCRYPTO_USED(X509V3_EXT_conf_nid);
|
LCRYPTO_USED(X509V3_EXT_conf_nid);
|
||||||
LCRYPTO_USED(X509V3_EXT_conf);
|
LCRYPTO_USED(X509V3_EXT_conf);
|
||||||
LCRYPTO_USED(X509V3_EXT_add_conf);
|
LCRYPTO_UNUSED(X509V3_EXT_add_conf);
|
||||||
LCRYPTO_USED(X509V3_EXT_REQ_add_conf);
|
LCRYPTO_UNUSED(X509V3_EXT_REQ_add_conf);
|
||||||
LCRYPTO_USED(X509V3_EXT_CRL_add_conf);
|
LCRYPTO_UNUSED(X509V3_EXT_CRL_add_conf);
|
||||||
LCRYPTO_USED(X509V3_add_value_bool_nf);
|
LCRYPTO_USED(X509V3_add_value_bool_nf);
|
||||||
LCRYPTO_USED(X509V3_get_value_bool);
|
LCRYPTO_USED(X509V3_get_value_bool);
|
||||||
LCRYPTO_USED(X509V3_get_value_int);
|
LCRYPTO_USED(X509V3_get_value_int);
|
||||||
LCRYPTO_USED(X509V3_set_nconf);
|
LCRYPTO_USED(X509V3_set_nconf);
|
||||||
LCRYPTO_USED(X509V3_set_conf_lhash);
|
LCRYPTO_UNUSED(X509V3_set_conf_lhash);
|
||||||
LCRYPTO_USED(X509V3_get_string);
|
LCRYPTO_UNUSED(X509V3_get_string);
|
||||||
LCRYPTO_USED(X509V3_get_section);
|
LCRYPTO_USED(X509V3_get_section);
|
||||||
LCRYPTO_USED(X509V3_string_free);
|
LCRYPTO_UNUSED(X509V3_string_free);
|
||||||
LCRYPTO_USED(X509V3_section_free);
|
LCRYPTO_USED(X509V3_section_free);
|
||||||
LCRYPTO_USED(X509V3_set_ctx);
|
LCRYPTO_USED(X509V3_set_ctx);
|
||||||
LCRYPTO_USED(X509V3_add_value);
|
LCRYPTO_USED(X509V3_add_value);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.\" $OpenBSD: X509_get0_signature.3,v 1.8 2023/03/16 12:01:47 job Exp $
|
.\" $OpenBSD: X509_get0_signature.3,v 1.9 2024/08/28 07:18:55 tb Exp $
|
||||||
.\" selective merge up to:
|
.\" selective merge up to:
|
||||||
.\" OpenSSL man3/X509_get0_signature 2f7a2520 Apr 25 17:28:08 2017 +0100
|
.\" OpenSSL man3/X509_get0_signature 2f7a2520 Apr 25 17:28:08 2017 +0100
|
||||||
.\"
|
.\"
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
.\" OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: March 16 2023 $
|
.Dd $Mdocdate: August 28 2024 $
|
||||||
.Dt X509_GET0_SIGNATURE 3
|
.Dt X509_GET0_SIGNATURE 3
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -78,7 +78,8 @@
|
||||||
.Nm X509_get_signature_type ,
|
.Nm X509_get_signature_type ,
|
||||||
.Nm X509_get_signature_nid ,
|
.Nm X509_get_signature_nid ,
|
||||||
.Nm X509_REQ_get_signature_nid ,
|
.Nm X509_REQ_get_signature_nid ,
|
||||||
.Nm X509_CRL_get_signature_nid
|
.Nm X509_CRL_get_signature_nid ,
|
||||||
|
.Nm X509_get_signature_info
|
||||||
.Nd signature information
|
.Nd signature information
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.In openssl/x509.h
|
.In openssl/x509.h
|
||||||
|
@ -124,6 +125,14 @@
|
||||||
.Fo X509_CRL_get_signature_nid
|
.Fo X509_CRL_get_signature_nid
|
||||||
.Fa "const X509_CRL *crl"
|
.Fa "const X509_CRL *crl"
|
||||||
.Fc
|
.Fc
|
||||||
|
.Ft int
|
||||||
|
.Fo X509_get_signature_info
|
||||||
|
.Fa "X509 *x"
|
||||||
|
.Fa "int *md_nid"
|
||||||
|
.Fa "int *pkey_nid"
|
||||||
|
.Fa "int *security_bits"
|
||||||
|
.Fa "uint32_t *flags"
|
||||||
|
.Fc
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
.Fn X509_get0_signature ,
|
.Fn X509_get0_signature ,
|
||||||
.Fn X509_REQ_get0_signature ,
|
.Fn X509_REQ_get0_signature ,
|
||||||
|
@ -170,6 +179,51 @@ respectively, just like
|
||||||
.Xr EVP_PKEY_id 3
|
.Xr EVP_PKEY_id 3
|
||||||
does.
|
does.
|
||||||
.Pp
|
.Pp
|
||||||
|
.Fn X509_get_signature_info
|
||||||
|
retrieves information about the signature of certificate
|
||||||
|
.Fa x .
|
||||||
|
The NID of the digest algorithm is written to
|
||||||
|
.Pf * Fa md_nid ,
|
||||||
|
the public key algorithm to
|
||||||
|
.Pf * Fa pkey_nid ,
|
||||||
|
the effective security bits to
|
||||||
|
.Pf * Fa security_bits ,
|
||||||
|
and flag details to
|
||||||
|
.Pf * Fa flags .
|
||||||
|
Any of the output parameters can be set to
|
||||||
|
.Dv NULL
|
||||||
|
if the information is not required.
|
||||||
|
If
|
||||||
|
.Fa flags
|
||||||
|
is not a
|
||||||
|
.Dv NULL
|
||||||
|
pointer,
|
||||||
|
.Pf * Fa flags
|
||||||
|
is set to the bitwise OR of:
|
||||||
|
.Bl -tag -width 1n -offset 3n
|
||||||
|
.It Dv X509_SIG_INFO_VALID
|
||||||
|
No error occurred.
|
||||||
|
This flag is set if
|
||||||
|
.Fn X509_get_signature_info
|
||||||
|
returns 1.
|
||||||
|
.It Dv X509_SIG_INFO_TLS
|
||||||
|
The signature algorithm is appropriate for use in TLS.
|
||||||
|
For a supported EdDSA algorithm (in LibreSSL this is Ed25519)
|
||||||
|
this flag is always set.
|
||||||
|
For an RSASSA-PSS PSS algorithm this flag is set if
|
||||||
|
the parameters are DER encoded,
|
||||||
|
the digest algorithm is one of SHA256, SHA384, or SHA512,
|
||||||
|
the same digest algorithm is used in the mask generation function,
|
||||||
|
and the salt length is equal to the digest algorithm's output length.
|
||||||
|
For all other signature algorithms this flag is set if the digest
|
||||||
|
algorithm is one of SHA1, SHA256, SHA384, or SHA512.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
.Fn X509_get_signature_info
|
||||||
|
returns 1 on success and 0 on failure.
|
||||||
|
Failure conditions include unsupported signature algorithms,
|
||||||
|
certificate parsing errors and memory allocation failure.
|
||||||
|
.Pp
|
||||||
These functions provide lower level access to the signature
|
These functions provide lower level access to the signature
|
||||||
for cases where an application wishes to analyse or generate a
|
for cases where an application wishes to analyse or generate a
|
||||||
signature in a form where
|
signature in a form where
|
||||||
|
@ -211,3 +265,16 @@ All these functions have been available since
|
||||||
.Fn X509_CRL_get0_tbs_sigalg
|
.Fn X509_CRL_get0_tbs_sigalg
|
||||||
first appeared in LibreSSL 3.7.1 and has been available since
|
first appeared in LibreSSL 3.7.1 and has been available since
|
||||||
.Ox 7.3 .
|
.Ox 7.3 .
|
||||||
|
.Pp
|
||||||
|
.Fn X509_get_signature_info
|
||||||
|
first appeared in OpenSSL 1.1.1 and has been available since
|
||||||
|
.Ox 7.6 .
|
||||||
|
.Sh CAVEATS
|
||||||
|
The security bits returned by
|
||||||
|
.Fn X509_get_signature_info
|
||||||
|
refer to the information available from the certificate signature
|
||||||
|
(such as the signing digest).
|
||||||
|
In some cases the actual security of the signature is smaller
|
||||||
|
because the signing key is less secure.
|
||||||
|
For example in a certificate signed using SHA512
|
||||||
|
and a 1024-bit RSA key.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: obj_xref.c,v 1.14 2024/01/27 16:08:43 tb Exp $ */
|
/* $OpenBSD: obj_xref.c,v 1.15 2024/08/28 06:53:24 tb Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2023 Theo Buehler <tb@openbsd.org>
|
* Copyright (c) 2023 Theo Buehler <tb@openbsd.org>
|
||||||
|
@ -178,7 +178,7 @@ static const struct {
|
||||||
{
|
{
|
||||||
.sign_nid = NID_rsassaPss,
|
.sign_nid = NID_rsassaPss,
|
||||||
.hash_nid = NID_undef,
|
.hash_nid = NID_undef,
|
||||||
.pkey_nid = NID_rsaEncryption,
|
.pkey_nid = NID_rsassaPss,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.sign_nid = NID_id_tc26_signwithdigest_gost3410_2012_256,
|
.sign_nid = NID_id_tc26_signwithdigest_gost3410_2012_256,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: ocsp_lib.c,v 1.26 2023/07/08 10:44:00 beck Exp $ */
|
/* $OpenBSD: ocsp_lib.c,v 1.28 2024/08/28 06:27:19 tb Exp $ */
|
||||||
/* Written by Tom Titchener <Tom_Titchener@groove.net> for the OpenSSL
|
/* Written by Tom Titchener <Tom_Titchener@groove.net> for the OpenSSL
|
||||||
* project. */
|
* project. */
|
||||||
|
|
||||||
|
@ -75,6 +75,7 @@
|
||||||
#include <openssl/x509v3.h>
|
#include <openssl/x509v3.h>
|
||||||
|
|
||||||
#include "ocsp_local.h"
|
#include "ocsp_local.h"
|
||||||
|
#include "x509_local.h"
|
||||||
|
|
||||||
/* Convert a certificate and its issuer to an OCSP_CERTID */
|
/* Convert a certificate and its issuer to an OCSP_CERTID */
|
||||||
|
|
||||||
|
@ -109,50 +110,44 @@ OCSP_cert_id_new(const EVP_MD *dgst, const X509_NAME *issuerName,
|
||||||
{
|
{
|
||||||
int nid;
|
int nid;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
X509_ALGOR *alg;
|
|
||||||
OCSP_CERTID *cid = NULL;
|
OCSP_CERTID *cid = NULL;
|
||||||
unsigned char md[EVP_MAX_MD_SIZE];
|
unsigned char md[EVP_MAX_MD_SIZE];
|
||||||
|
|
||||||
if (!(cid = OCSP_CERTID_new()))
|
if ((cid = OCSP_CERTID_new()) == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
alg = cid->hashAlgorithm;
|
|
||||||
if (alg->algorithm != NULL)
|
|
||||||
ASN1_OBJECT_free(alg->algorithm);
|
|
||||||
if ((nid = EVP_MD_type(dgst)) == NID_undef) {
|
if ((nid = EVP_MD_type(dgst)) == NID_undef) {
|
||||||
OCSPerror(OCSP_R_UNKNOWN_NID);
|
OCSPerror(OCSP_R_UNKNOWN_NID);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
if (!(alg->algorithm = OBJ_nid2obj(nid)))
|
if (!X509_ALGOR_set0_by_nid(cid->hashAlgorithm, nid, V_ASN1_NULL, NULL))
|
||||||
goto err;
|
goto err;
|
||||||
if ((alg->parameter = ASN1_TYPE_new()) == NULL)
|
|
||||||
goto err;
|
|
||||||
alg->parameter->type = V_ASN1_NULL;
|
|
||||||
|
|
||||||
if (!X509_NAME_digest(issuerName, dgst, md, &i))
|
if (!X509_NAME_digest(issuerName, dgst, md, &i)) {
|
||||||
goto digerr;
|
OCSPerror(OCSP_R_DIGEST_ERR);
|
||||||
if (!(ASN1_OCTET_STRING_set(cid->issuerNameHash, md, i)))
|
goto err;
|
||||||
|
}
|
||||||
|
if (!ASN1_OCTET_STRING_set(cid->issuerNameHash, md, i))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/* Calculate the issuerKey hash, excluding tag and length */
|
/* Calculate the issuerKey hash, excluding tag and length */
|
||||||
if (!EVP_Digest(issuerKey->data, issuerKey->length, md, &i, dgst, NULL))
|
if (!EVP_Digest(issuerKey->data, issuerKey->length, md, &i, dgst, NULL))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (!(ASN1_OCTET_STRING_set(cid->issuerKeyHash, md, i)))
|
if (!ASN1_OCTET_STRING_set(cid->issuerKeyHash, md, i))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (serialNumber) {
|
if (serialNumber != NULL) {
|
||||||
ASN1_INTEGER_free(cid->serialNumber);
|
ASN1_INTEGER_free(cid->serialNumber);
|
||||||
if (!(cid->serialNumber = ASN1_INTEGER_dup(serialNumber)))
|
if ((cid->serialNumber = ASN1_INTEGER_dup(serialNumber)) == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
return cid;
|
return cid;
|
||||||
|
|
||||||
digerr:
|
err:
|
||||||
OCSPerror(OCSP_R_DIGEST_ERR);
|
OCSP_CERTID_free(cid);
|
||||||
err:
|
|
||||||
if (cid)
|
|
||||||
OCSP_CERTID_free(cid);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(OCSP_cert_id_new);
|
LCRYPTO_ALIAS(OCSP_cert_id_new);
|
||||||
|
@ -162,6 +157,11 @@ OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX - should we really ignore parameters here? We probably need to
|
||||||
|
* consider omitted parameters and explicit ASN.1 NULL as equal for
|
||||||
|
* the SHAs, so don't blindly switch to X509_ALGOR_cmp().
|
||||||
|
*/
|
||||||
ret = OBJ_cmp(a->hashAlgorithm->algorithm, b->hashAlgorithm->algorithm);
|
ret = OBJ_cmp(a->hashAlgorithm->algorithm, b->hashAlgorithm->algorithm);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: ocsp_prn.c,v 1.10 2023/07/08 10:44:00 beck Exp $ */
|
/* $OpenBSD: ocsp_prn.c,v 1.11 2024/08/28 06:18:44 tb Exp $ */
|
||||||
/* Written by Tom Titchener <Tom_Titchener@groove.net> for the OpenSSL
|
/* Written by Tom Titchener <Tom_Titchener@groove.net> for the OpenSSL
|
||||||
* project. */
|
* project. */
|
||||||
|
|
||||||
|
@ -65,16 +65,20 @@
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/ocsp.h>
|
#include <openssl/ocsp.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
#include <openssl/x509.h>
|
||||||
|
|
||||||
#include "ocsp_local.h"
|
#include "ocsp_local.h"
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ocsp_certid_print(BIO *bp, OCSP_CERTID* a, int indent)
|
ocsp_certid_print(BIO *bp, OCSP_CERTID* a, int indent)
|
||||||
{
|
{
|
||||||
|
const ASN1_OBJECT *aobj;
|
||||||
|
|
||||||
BIO_printf(bp, "%*sCertificate ID:\n", indent, "");
|
BIO_printf(bp, "%*sCertificate ID:\n", indent, "");
|
||||||
indent += 2;
|
indent += 2;
|
||||||
BIO_printf(bp, "%*sHash Algorithm: ", indent, "");
|
BIO_printf(bp, "%*sHash Algorithm: ", indent, "");
|
||||||
i2a_ASN1_OBJECT(bp, a->hashAlgorithm->algorithm);
|
X509_ALGOR_get0(&aobj, NULL, NULL, a->hashAlgorithm);
|
||||||
|
i2a_ASN1_OBJECT(bp, aobj);
|
||||||
BIO_printf(bp, "\n%*sIssuer Name Hash: ", indent, "");
|
BIO_printf(bp, "\n%*sIssuer Name Hash: ", indent, "");
|
||||||
i2a_ASN1_STRING(bp, a->issuerNameHash, V_ASN1_OCTET_STRING);
|
i2a_ASN1_STRING(bp, a->issuerNameHash, V_ASN1_OCTET_STRING);
|
||||||
BIO_printf(bp, "\n%*sIssuer Key Hash: ", indent, "");
|
BIO_printf(bp, "\n%*sIssuer Key Hash: ", indent, "");
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: rsa_ameth.c,v 1.58 2024/03/17 07:10:00 tb Exp $ */
|
/* $OpenBSD: rsa_ameth.c,v 1.60 2024/08/29 16:58:19 tb Exp $ */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 2006.
|
* project 2006.
|
||||||
*/
|
*/
|
||||||
|
@ -845,6 +845,58 @@ rsa_pss_get_param(const RSA_PSS_PARAMS *pss, const EVP_MD **pmd,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
rsa_pss_signature_info(const X509_ALGOR *alg, int *out_md_nid,
|
||||||
|
int *out_pkey_nid, int *out_security_bits, uint32_t *out_flags)
|
||||||
|
{
|
||||||
|
RSA_PSS_PARAMS *pss = NULL;
|
||||||
|
const ASN1_OBJECT *aobj;
|
||||||
|
const EVP_MD *md, *mgf1md;
|
||||||
|
int md_len, salt_len;
|
||||||
|
int md_nid = NID_undef, pkey_nid = NID_undef;
|
||||||
|
int security_bits = -1;
|
||||||
|
uint32_t flags = 0;
|
||||||
|
|
||||||
|
X509_ALGOR_get0(&aobj, NULL, NULL, alg);
|
||||||
|
if (OBJ_obj2nid(aobj) != EVP_PKEY_RSA_PSS)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if ((pss = rsa_pss_decode(alg)) == NULL)
|
||||||
|
goto err;
|
||||||
|
if (!rsa_pss_get_param(pss, &md, &mgf1md, &salt_len))
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if ((md_nid = EVP_MD_type(md)) == NID_undef)
|
||||||
|
goto err;
|
||||||
|
if ((md_len = EVP_MD_size(md)) <= 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RFC 8446, section 4.2.3 - restricts the digest algorithm:
|
||||||
|
* - it must be one of SHA256, SHA384, and SHA512;
|
||||||
|
* - the same digest must be used in the mask generation function;
|
||||||
|
* - the salt length must match the output length of the digest.
|
||||||
|
* XXX - consider separate flags for these checks.
|
||||||
|
*/
|
||||||
|
if (md_nid == NID_sha256 || md_nid == NID_sha384 || md_nid == NID_sha512) {
|
||||||
|
if (md_nid == EVP_MD_type(mgf1md) && salt_len == md_len)
|
||||||
|
flags |= X509_SIG_INFO_TLS;
|
||||||
|
}
|
||||||
|
|
||||||
|
security_bits = md_len * 4;
|
||||||
|
flags |= X509_SIG_INFO_VALID;
|
||||||
|
|
||||||
|
*out_md_nid = md_nid;
|
||||||
|
*out_pkey_nid = pkey_nid;
|
||||||
|
*out_security_bits = security_bits;
|
||||||
|
*out_flags = flags;
|
||||||
|
|
||||||
|
err:
|
||||||
|
RSA_PSS_PARAMS_free(pss);
|
||||||
|
|
||||||
|
return (flags & X509_SIG_INFO_VALID) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_CMS
|
#ifndef OPENSSL_NO_CMS
|
||||||
static int
|
static int
|
||||||
rsa_cms_verify(CMS_SignerInfo *si)
|
rsa_cms_verify(CMS_SignerInfo *si)
|
||||||
|
@ -1030,12 +1082,6 @@ rsa_item_sign(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
rsa_pkey_check(const EVP_PKEY *pkey)
|
|
||||||
{
|
|
||||||
return RSA_check_key(pkey->pkey.rsa);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_CMS
|
#ifndef OPENSSL_NO_CMS
|
||||||
static RSA_OAEP_PARAMS *
|
static RSA_OAEP_PARAMS *
|
||||||
rsa_oaep_decode(const X509_ALGOR *alg)
|
rsa_oaep_decode(const X509_ALGOR *alg)
|
||||||
|
@ -1183,16 +1229,12 @@ const EVP_PKEY_ASN1_METHOD rsa_asn1_meth = {
|
||||||
.old_priv_encode = old_rsa_priv_encode,
|
.old_priv_encode = old_rsa_priv_encode,
|
||||||
.item_verify = rsa_item_verify,
|
.item_verify = rsa_item_verify,
|
||||||
.item_sign = rsa_item_sign,
|
.item_sign = rsa_item_sign,
|
||||||
|
|
||||||
.pkey_check = rsa_pkey_check,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const EVP_PKEY_ASN1_METHOD rsa2_asn1_meth = {
|
const EVP_PKEY_ASN1_METHOD rsa2_asn1_meth = {
|
||||||
.base_method = &rsa_asn1_meth,
|
.base_method = &rsa_asn1_meth,
|
||||||
.pkey_id = EVP_PKEY_RSA2,
|
.pkey_id = EVP_PKEY_RSA2,
|
||||||
.pkey_flags = ASN1_PKEY_ALIAS,
|
.pkey_flags = ASN1_PKEY_ALIAS,
|
||||||
|
|
||||||
.pkey_check = rsa_pkey_check,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = {
|
const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = {
|
||||||
|
@ -1216,6 +1258,8 @@ const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = {
|
||||||
.pkey_bits = rsa_bits,
|
.pkey_bits = rsa_bits,
|
||||||
.pkey_security_bits = rsa_security_bits,
|
.pkey_security_bits = rsa_security_bits,
|
||||||
|
|
||||||
|
.signature_info = rsa_pss_signature_info,
|
||||||
|
|
||||||
.sig_print = rsa_sig_print,
|
.sig_print = rsa_sig_print,
|
||||||
|
|
||||||
.pkey_free = rsa_free,
|
.pkey_free = rsa_free,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: x509.h,v 1.112 2024/06/12 03:55:46 tb Exp $ */
|
/* $OpenBSD: x509.h,v 1.113 2024/08/28 07:15:04 tb Exp $ */
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -622,6 +622,14 @@ X509 * d2i_X509_AUX(X509 **a,const unsigned char **pp,long length);
|
||||||
|
|
||||||
int i2d_re_X509_tbs(X509 *x, unsigned char **pp);
|
int i2d_re_X509_tbs(X509 *x, unsigned char **pp);
|
||||||
|
|
||||||
|
#if defined(LIBRESSL_INTERNAL) || defined(LIBRESSL_NEXT_API)
|
||||||
|
/* Flags returned by X509_get_signature_info(): valid and suitable for TLS. */
|
||||||
|
#define X509_SIG_INFO_VALID 1
|
||||||
|
#define X509_SIG_INFO_TLS 2
|
||||||
|
int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits,
|
||||||
|
uint32_t *flags);
|
||||||
|
#endif
|
||||||
|
|
||||||
void X509_get0_signature(const ASN1_BIT_STRING **psig,
|
void X509_get0_signature(const ASN1_BIT_STRING **psig,
|
||||||
const X509_ALGOR **palg, const X509 *x);
|
const X509_ALGOR **palg, const X509 *x);
|
||||||
int X509_get_signature_nid(const X509 *x);
|
int X509_get_signature_nid(const X509 *x);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: x509_conf.c,v 1.18 2024/06/24 06:32:04 tb Exp $ */
|
/* $OpenBSD: x509_conf.c,v 1.22 2024/08/28 08:59:03 tb Exp $ */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 1999.
|
* project 1999.
|
||||||
*/
|
*/
|
||||||
|
@ -74,18 +74,11 @@ static X509_EXTENSION *do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int nid,
|
||||||
int crit, const char *value);
|
int crit, const char *value);
|
||||||
static X509_EXTENSION *v3_generic_extension(const char *ext, const char *value,
|
static X509_EXTENSION *v3_generic_extension(const char *ext, const char *value,
|
||||||
int crit, int type, X509V3_CTX *ctx);
|
int crit, int type, X509V3_CTX *ctx);
|
||||||
static char *conf_lhash_get_string(void *db, const char *section,
|
|
||||||
const char *value);
|
|
||||||
static STACK_OF(CONF_VALUE) *conf_lhash_get_section(void *db,
|
|
||||||
const char *section);
|
|
||||||
static X509_EXTENSION *do_ext_i2d(const X509V3_EXT_METHOD *method, int nid,
|
static X509_EXTENSION *do_ext_i2d(const X509V3_EXT_METHOD *method, int nid,
|
||||||
int crit, void *ext_struct);
|
int crit, void *ext_struct);
|
||||||
static unsigned char *generic_asn1(const char *value, X509V3_CTX *ctx,
|
static unsigned char *generic_asn1(const char *value, X509V3_CTX *ctx,
|
||||||
long *ext_len);
|
long *ext_len);
|
||||||
|
|
||||||
/* CONF *conf: Config file */
|
|
||||||
/* char *name: Name */
|
|
||||||
/* char *value: Value */
|
|
||||||
X509_EXTENSION *
|
X509_EXTENSION *
|
||||||
X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name,
|
X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name,
|
||||||
const char *value)
|
const char *value)
|
||||||
|
@ -106,11 +99,8 @@ X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name,
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_nconf);
|
LCRYPTO_ALIAS(X509V3_EXT_nconf);
|
||||||
|
|
||||||
/* CONF *conf: Config file */
|
|
||||||
/* char *value: Value */
|
|
||||||
X509_EXTENSION *
|
X509_EXTENSION *
|
||||||
X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int nid,
|
X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int nid, const char *value)
|
||||||
const char *value)
|
|
||||||
{
|
{
|
||||||
int crit;
|
int crit;
|
||||||
int ext_type;
|
int ext_type;
|
||||||
|
@ -123,11 +113,8 @@ X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int nid,
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_nconf_nid);
|
LCRYPTO_ALIAS(X509V3_EXT_nconf_nid);
|
||||||
|
|
||||||
/* CONF *conf: Config file */
|
|
||||||
/* char *value: Value */
|
|
||||||
static X509_EXTENSION *
|
static X509_EXTENSION *
|
||||||
do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int nid, int crit,
|
do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int nid, int crit, const char *value)
|
||||||
const char *value)
|
|
||||||
{
|
{
|
||||||
const X509V3_EXT_METHOD *method;
|
const X509V3_EXT_METHOD *method;
|
||||||
X509_EXTENSION *ext;
|
X509_EXTENSION *ext;
|
||||||
|
@ -163,7 +150,7 @@ do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int nid, int crit,
|
||||||
} else if (method->s2i) {
|
} else if (method->s2i) {
|
||||||
ext_struct = method->s2i(method, ctx, value);
|
ext_struct = method->s2i(method, ctx, value);
|
||||||
} else if (method->r2i) {
|
} else if (method->r2i) {
|
||||||
if (!ctx->db || !ctx->db_meth) {
|
if (ctx->db == NULL) {
|
||||||
X509V3error(X509V3_R_NO_CONFIG_DATABASE);
|
X509V3error(X509V3_R_NO_CONFIG_DATABASE);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -232,7 +219,6 @@ do_ext_i2d(const X509V3_EXT_METHOD *method, int nid, int crit,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given an internal structure, nid and critical flag create an extension */
|
/* Given an internal structure, nid and critical flag create an extension */
|
||||||
|
|
||||||
X509_EXTENSION *
|
X509_EXTENSION *
|
||||||
X509V3_EXT_i2d(int nid, int crit, void *ext_struct)
|
X509V3_EXT_i2d(int nid, int crit, void *ext_struct)
|
||||||
{
|
{
|
||||||
|
@ -347,7 +333,8 @@ generic_asn1(const char *value, X509V3_CTX *ctx, long *ext_len)
|
||||||
return ext_der;
|
return ext_der;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is the main function: add a bunch of extensions based on a config file
|
/*
|
||||||
|
* This is the main function: add a bunch of extensions based on a config file
|
||||||
* section to an extension STACK.
|
* section to an extension STACK.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -374,8 +361,6 @@ X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section,
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_add_nconf_sk);
|
LCRYPTO_ALIAS(X509V3_EXT_add_nconf_sk);
|
||||||
|
|
||||||
/* Convenience functions to add extensions to a certificate, CRL and request */
|
|
||||||
|
|
||||||
int
|
int
|
||||||
X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
|
X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
|
||||||
X509 *cert)
|
X509 *cert)
|
||||||
|
@ -388,8 +373,6 @@ X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_add_nconf);
|
LCRYPTO_ALIAS(X509V3_EXT_add_nconf);
|
||||||
|
|
||||||
/* Same as above but for a CRL */
|
|
||||||
|
|
||||||
int
|
int
|
||||||
X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
|
X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
|
||||||
X509_CRL *crl)
|
X509_CRL *crl)
|
||||||
|
@ -402,8 +385,6 @@ X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_CRL_add_nconf);
|
LCRYPTO_ALIAS(X509V3_EXT_CRL_add_nconf);
|
||||||
|
|
||||||
/* Add extensions to certificate request */
|
|
||||||
|
|
||||||
int
|
int
|
||||||
X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
|
X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
|
||||||
X509_REQ *req)
|
X509_REQ *req)
|
||||||
|
@ -422,73 +403,44 @@ X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_REQ_add_nconf);
|
LCRYPTO_ALIAS(X509V3_EXT_REQ_add_nconf);
|
||||||
|
|
||||||
/* Config database functions */
|
/* XXX - remove in next bump. */
|
||||||
|
|
||||||
char *
|
char *
|
||||||
X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section)
|
X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section)
|
||||||
{
|
{
|
||||||
if (!ctx->db || !ctx->db_meth || !ctx->db_meth->get_string) {
|
X509V3error(ERR_R_DISABLED);
|
||||||
X509V3error(X509V3_R_OPERATION_NOT_DEFINED);
|
return NULL;
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return ctx->db_meth->get_string(ctx->db, name, section);
|
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_get_string);
|
LCRYPTO_ALIAS(X509V3_get_string);
|
||||||
|
|
||||||
STACK_OF(CONF_VALUE) *
|
STACK_OF(CONF_VALUE) *
|
||||||
X509V3_get_section(X509V3_CTX *ctx, const char *section)
|
X509V3_get_section(X509V3_CTX *ctx, const char *section)
|
||||||
{
|
{
|
||||||
if (!ctx->db || !ctx->db_meth || !ctx->db_meth->get_section) {
|
if (ctx->db == NULL) {
|
||||||
X509V3error(X509V3_R_OPERATION_NOT_DEFINED);
|
X509V3error(X509V3_R_OPERATION_NOT_DEFINED);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return ctx->db_meth->get_section(ctx->db, section);
|
return NCONF_get_section(ctx->db, section);
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_get_section);
|
LCRYPTO_ALIAS(X509V3_get_section);
|
||||||
|
|
||||||
|
/* XXX - remove in next bump. */
|
||||||
void
|
void
|
||||||
X509V3_string_free(X509V3_CTX *ctx, char *str)
|
X509V3_string_free(X509V3_CTX *ctx, char *str)
|
||||||
{
|
{
|
||||||
if (!str)
|
return;
|
||||||
return;
|
|
||||||
if (ctx->db_meth->free_string)
|
|
||||||
ctx->db_meth->free_string(ctx->db, str);
|
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_string_free);
|
LCRYPTO_ALIAS(X509V3_string_free);
|
||||||
|
|
||||||
void
|
void
|
||||||
X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section)
|
X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section)
|
||||||
{
|
{
|
||||||
if (!section)
|
return;
|
||||||
return;
|
|
||||||
if (ctx->db_meth->free_section)
|
|
||||||
ctx->db_meth->free_section(ctx->db, section);
|
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_section_free);
|
LCRYPTO_ALIAS(X509V3_section_free);
|
||||||
|
|
||||||
static char *
|
|
||||||
nconf_get_string(void *db, const char *section, const char *value)
|
|
||||||
{
|
|
||||||
return NCONF_get_string(db, section, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
static STACK_OF(CONF_VALUE) *
|
|
||||||
nconf_get_section(void *db, const char *section)
|
|
||||||
{
|
|
||||||
return NCONF_get_section(db, section);
|
|
||||||
}
|
|
||||||
|
|
||||||
static X509V3_CONF_METHOD nconf_method = {
|
|
||||||
nconf_get_string,
|
|
||||||
nconf_get_section,
|
|
||||||
NULL,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
void
|
||||||
X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf)
|
X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf)
|
||||||
{
|
{
|
||||||
ctx->db_meth = &nconf_method;
|
|
||||||
ctx->db = conf;
|
ctx->db = conf;
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_set_nconf);
|
LCRYPTO_ALIAS(X509V3_set_nconf);
|
||||||
|
@ -505,8 +457,6 @@ X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subj, X509_REQ *req,
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_set_ctx);
|
LCRYPTO_ALIAS(X509V3_set_ctx);
|
||||||
|
|
||||||
/* Old conf compatibility functions */
|
|
||||||
|
|
||||||
X509_EXTENSION *
|
X509_EXTENSION *
|
||||||
X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, const char *name,
|
X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, const char *name,
|
||||||
const char *value)
|
const char *value)
|
||||||
|
@ -518,8 +468,6 @@ X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, const char *name,
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_conf);
|
LCRYPTO_ALIAS(X509V3_EXT_conf);
|
||||||
|
|
||||||
/* LHASH *conf: Config file */
|
|
||||||
/* char *value: Value */
|
|
||||||
X509_EXTENSION *
|
X509_EXTENSION *
|
||||||
X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, int nid,
|
X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, int nid,
|
||||||
const char *value)
|
const char *value)
|
||||||
|
@ -531,30 +479,13 @@ X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, int nid,
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_conf_nid);
|
LCRYPTO_ALIAS(X509V3_EXT_conf_nid);
|
||||||
|
|
||||||
static char *
|
/*
|
||||||
conf_lhash_get_string(void *db, const char *section, const char *value)
|
* XXX - remove everything below in the next bump.
|
||||||
{
|
*/
|
||||||
return CONF_get_string(db, section, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
static STACK_OF(CONF_VALUE) *
|
|
||||||
conf_lhash_get_section(void *db, const char *section)
|
|
||||||
{
|
|
||||||
return CONF_get_section(db, section);
|
|
||||||
}
|
|
||||||
|
|
||||||
static X509V3_CONF_METHOD conf_lhash_method = {
|
|
||||||
conf_lhash_get_string,
|
|
||||||
conf_lhash_get_section,
|
|
||||||
NULL,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
void
|
||||||
X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash)
|
X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash)
|
||||||
{
|
{
|
||||||
ctx->db_meth = &conf_lhash_method;
|
|
||||||
ctx->db = lhash;
|
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_set_conf_lhash);
|
LCRYPTO_ALIAS(X509V3_set_conf_lhash);
|
||||||
|
|
||||||
|
@ -562,35 +493,25 @@ int
|
||||||
X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
|
X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
|
||||||
const char *section, X509 *cert)
|
const char *section, X509 *cert)
|
||||||
{
|
{
|
||||||
CONF ctmp;
|
X509V3error(ERR_R_DISABLED);
|
||||||
|
return 0;
|
||||||
CONF_set_nconf(&ctmp, conf);
|
|
||||||
return X509V3_EXT_add_nconf(&ctmp, ctx, section, cert);
|
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_add_conf);
|
LCRYPTO_ALIAS(X509V3_EXT_add_conf);
|
||||||
|
|
||||||
/* Same as above but for a CRL */
|
|
||||||
|
|
||||||
int
|
int
|
||||||
X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
|
X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
|
||||||
const char *section, X509_CRL *crl)
|
const char *section, X509_CRL *crl)
|
||||||
{
|
{
|
||||||
CONF ctmp;
|
X509V3error(ERR_R_DISABLED);
|
||||||
|
return 0;
|
||||||
CONF_set_nconf(&ctmp, conf);
|
|
||||||
return X509V3_EXT_CRL_add_nconf(&ctmp, ctx, section, crl);
|
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_CRL_add_conf);
|
LCRYPTO_ALIAS(X509V3_EXT_CRL_add_conf);
|
||||||
|
|
||||||
/* Add extensions to certificate request */
|
|
||||||
|
|
||||||
int
|
int
|
||||||
X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
|
X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
|
||||||
const char *section, X509_REQ *req)
|
const char *section, X509_REQ *req)
|
||||||
{
|
{
|
||||||
CONF ctmp;
|
X509V3error(ERR_R_DISABLED);
|
||||||
|
return 0;
|
||||||
CONF_set_nconf(&ctmp, conf);
|
|
||||||
return X509V3_EXT_REQ_add_nconf(&ctmp, ctx, section, req);
|
|
||||||
}
|
}
|
||||||
LCRYPTO_ALIAS(X509V3_EXT_REQ_add_conf);
|
LCRYPTO_ALIAS(X509V3_EXT_REQ_add_conf);
|
||||||
|
|
113
lib/libcrypto/x509/x509_siginfo.c
Normal file
113
lib/libcrypto/x509/x509_siginfo.c
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
/* $OpenBSD: x509_siginfo.c,v 1.1 2024/08/28 07:15:04 tb Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 Theo Buehler <tb@openbsd.org>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
#include <openssl/objects.h>
|
||||||
|
#include <openssl/x509.h>
|
||||||
|
|
||||||
|
#include "evp_local.h"
|
||||||
|
|
||||||
|
#include "x509_internal.h"
|
||||||
|
|
||||||
|
static int
|
||||||
|
x509_find_sigid_algs(const X509 *x509, int *out_md_nid, int *out_pkey_nid)
|
||||||
|
{
|
||||||
|
const ASN1_OBJECT *aobj;
|
||||||
|
int nid;
|
||||||
|
|
||||||
|
*out_md_nid = NID_undef;
|
||||||
|
*out_pkey_nid = NID_undef;
|
||||||
|
|
||||||
|
X509_ALGOR_get0(&aobj, NULL, NULL, x509->sig_alg);
|
||||||
|
if ((nid = OBJ_obj2nid(aobj)) == NID_undef)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return OBJ_find_sigid_algs(nid, out_md_nid, out_pkey_nid);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
X509_get_signature_info(X509 *x509, int *out_md_nid, int *out_pkey_nid,
|
||||||
|
int *out_security_bits, uint32_t *out_flags)
|
||||||
|
{
|
||||||
|
const EVP_MD *md;
|
||||||
|
int md_nid = NID_undef, pkey_nid = NID_undef, security_bits = -1;
|
||||||
|
uint32_t flags = 0;
|
||||||
|
|
||||||
|
if (out_md_nid != NULL)
|
||||||
|
*out_md_nid = md_nid;
|
||||||
|
if (out_pkey_nid != NULL)
|
||||||
|
*out_pkey_nid = pkey_nid;
|
||||||
|
if (out_security_bits != NULL)
|
||||||
|
*out_security_bits = security_bits;
|
||||||
|
if (out_flags != NULL)
|
||||||
|
*out_flags = flags;
|
||||||
|
|
||||||
|
if (!x509v3_cache_extensions(x509))
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if (!x509_find_sigid_algs(x509, &md_nid, &pkey_nid))
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If md_nid == NID_undef, this means we need to consult the ameth.
|
||||||
|
* Handlers are available for EdDSA and RSA-PSS. No other signature
|
||||||
|
* algorithm with NID_undef should appear in a certificate.
|
||||||
|
*/
|
||||||
|
if (md_nid == NID_undef) {
|
||||||
|
const EVP_PKEY_ASN1_METHOD *ameth;
|
||||||
|
|
||||||
|
if ((ameth = EVP_PKEY_asn1_find(NULL, pkey_nid)) == NULL ||
|
||||||
|
ameth->signature_info == NULL)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if (!ameth->signature_info(x509->sig_alg, &md_nid, &pkey_nid,
|
||||||
|
&security_bits, &flags))
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* XXX - OpenSSL 3 special cases SHA-1 (63 bits) and MD5 (39 bits). */
|
||||||
|
if ((md = EVP_get_digestbynid(md_nid)) == NULL)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
/* Assume 4 bits of collision resistance per octet. */
|
||||||
|
if ((security_bits = EVP_MD_size(md)) <= 0)
|
||||||
|
goto err;
|
||||||
|
security_bits *= 4;
|
||||||
|
|
||||||
|
if (md_nid == NID_sha1 || md_nid == NID_sha256 ||
|
||||||
|
md_nid == NID_sha384 || md_nid == NID_sha512)
|
||||||
|
flags |= X509_SIG_INFO_TLS;
|
||||||
|
|
||||||
|
flags |= X509_SIG_INFO_VALID;
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (out_md_nid != NULL)
|
||||||
|
*out_md_nid = md_nid;
|
||||||
|
if (out_pkey_nid != NULL)
|
||||||
|
*out_pkey_nid = pkey_nid;
|
||||||
|
if (out_security_bits != NULL)
|
||||||
|
*out_security_bits = security_bits;
|
||||||
|
if (out_flags != NULL)
|
||||||
|
*out_flags = flags;
|
||||||
|
|
||||||
|
err:
|
||||||
|
return (flags & X509_SIG_INFO_VALID) != 0;
|
||||||
|
}
|
||||||
|
LCRYPTO_ALIAS(X509_get_signature_info);
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: x509_vfy.c,v 1.144 2024/08/04 08:15:36 tb Exp $ */
|
/* $OpenBSD: x509_vfy.c,v 1.145 2024/08/28 07:37:50 tb Exp $ */
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -2541,28 +2541,11 @@ check_key_level(X509_STORE_CTX *ctx, X509 *cert)
|
||||||
static int
|
static int
|
||||||
check_sig_level(X509_STORE_CTX *ctx, X509 *cert)
|
check_sig_level(X509_STORE_CTX *ctx, X509 *cert)
|
||||||
{
|
{
|
||||||
const EVP_MD *md;
|
int bits;
|
||||||
int bits, nid, md_nid;
|
|
||||||
|
|
||||||
if ((nid = X509_get_signature_nid(cert)) == NID_undef)
|
if (!X509_get_signature_info(cert, NULL, NULL, &bits, NULL))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
|
||||||
* Look up signature algorithm digest.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!OBJ_find_sigid_algs(nid, &md_nid, NULL))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (md_nid == NID_undef)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if ((md = EVP_get_digestbynid(md_nid)) == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Assume 4 bits of collision resistance for each hash octet. */
|
|
||||||
bits = EVP_MD_size(md) * 4;
|
|
||||||
|
|
||||||
return enough_bits_for_security_level(bits, ctx->param->security_level);
|
return enough_bits_for_security_level(bits, ctx->param->security_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: x509v3.h,v 1.29 2024/03/02 10:43:52 tb Exp $ */
|
/* $OpenBSD: x509v3.h,v 1.30 2024/08/28 08:22:57 tb Exp $ */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 1999.
|
* project 1999.
|
||||||
*/
|
*/
|
||||||
|
@ -120,6 +120,7 @@ struct v3_ext_method {
|
||||||
void *usr_data; /* Any extension specific data */
|
void *usr_data; /* Any extension specific data */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* XXX - remove in next bump. */
|
||||||
typedef struct X509V3_CONF_METHOD_st {
|
typedef struct X509V3_CONF_METHOD_st {
|
||||||
char *(*get_string)(void *db, const char *section, const char *value);
|
char *(*get_string)(void *db, const char *section, const char *value);
|
||||||
STACK_OF(CONF_VALUE) *(*get_section)(void *db, const char *section);
|
STACK_OF(CONF_VALUE) *(*get_section)(void *db, const char *section);
|
||||||
|
@ -127,7 +128,6 @@ typedef struct X509V3_CONF_METHOD_st {
|
||||||
void (*free_section)(void *db, STACK_OF(CONF_VALUE) *section);
|
void (*free_section)(void *db, STACK_OF(CONF_VALUE) *section);
|
||||||
} X509V3_CONF_METHOD;
|
} X509V3_CONF_METHOD;
|
||||||
|
|
||||||
/* Context specific info */
|
|
||||||
struct v3_ext_ctx {
|
struct v3_ext_ctx {
|
||||||
#define CTX_TEST 0x1
|
#define CTX_TEST 0x1
|
||||||
int flags;
|
int flags;
|
||||||
|
@ -135,9 +135,8 @@ struct v3_ext_ctx {
|
||||||
X509 *subject_cert;
|
X509 *subject_cert;
|
||||||
X509_REQ *subject_req;
|
X509_REQ *subject_req;
|
||||||
X509_CRL *crl;
|
X509_CRL *crl;
|
||||||
X509V3_CONF_METHOD *db_meth;
|
X509V3_CONF_METHOD *db_meth; /* XXX - remove in next bump. */
|
||||||
void *db;
|
void *db;
|
||||||
/* Maybe more here */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct v3_ext_method X509V3_EXT_METHOD;
|
typedef struct v3_ext_method X509V3_EXT_METHOD;
|
||||||
|
|
|
@ -61,7 +61,7 @@ dup_sockaddr(struct sockaddr *sa, size_t sa_length)
|
||||||
static int
|
static int
|
||||||
get_instance(const char *name)
|
get_instance(const char *name)
|
||||||
{
|
{
|
||||||
const char *cp, *endcp;
|
const char *cp, *endcp, *errstr;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (strcmp(name, "any") == 0) {
|
if (strcmp(name, "any") == 0) {
|
||||||
|
@ -77,11 +77,10 @@ get_instance(const char *name)
|
||||||
for (cp = name; cp < endcp && !isdigit((unsigned char)*cp); ++cp)
|
for (cp = name; cp < endcp && !isdigit((unsigned char)*cp); ++cp)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (isdigit((unsigned char)*cp))
|
n = strtonum(cp, 0, INT_MAX, &errstr);
|
||||||
n = atoi(cp);
|
if (errstr != NULL)
|
||||||
else
|
return -1;
|
||||||
n = 0;
|
return n;
|
||||||
return (n);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -168,7 +167,11 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||||
* Add it to the list, in the appropriate location.
|
* Add it to the list, in the appropriate location.
|
||||||
* First, get the instance number of this interface.
|
* First, get the instance number of this interface.
|
||||||
*/
|
*/
|
||||||
this_instance = get_instance(name);
|
if ((this_instance = get_instance(name)) == -1) {
|
||||||
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
|
"malformed device name: %s", name);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now look for the last interface with an instance number
|
* Now look for the last interface with an instance number
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: inet.c,v 1.27 2024/04/05 18:01:56 deraadt Exp $ */
|
/* $OpenBSD: inet.c,v 1.28 2024/08/28 11:41:42 op Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1995, 1996, 1997, 1998
|
* Copyright (c) 1994, 1995, 1996, 1997, 1998
|
||||||
|
@ -47,6 +47,7 @@
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -115,6 +116,7 @@ pcap_lookupdev(char *errbuf)
|
||||||
struct ifaddrs *ifap, *ifa, *mp;
|
struct ifaddrs *ifap, *ifa, *mp;
|
||||||
int n, minunit;
|
int n, minunit;
|
||||||
char *cp;
|
char *cp;
|
||||||
|
const char *errstr;
|
||||||
static char device[IF_NAMESIZE + 1];
|
static char device[IF_NAMESIZE + 1];
|
||||||
|
|
||||||
if (getifaddrs(&ifap) != 0) {
|
if (getifaddrs(&ifap) != 0) {
|
||||||
|
@ -132,7 +134,9 @@ pcap_lookupdev(char *errbuf)
|
||||||
continue;
|
continue;
|
||||||
for (cp = ifa->ifa_name; !isdigit((unsigned char)*cp); ++cp)
|
for (cp = ifa->ifa_name; !isdigit((unsigned char)*cp); ++cp)
|
||||||
continue;
|
continue;
|
||||||
n = atoi(cp);
|
n = strtonum(cp, 0, INT_MAX, &errstr);
|
||||||
|
if (errstr != NULL)
|
||||||
|
continue;
|
||||||
if (n < minunit) {
|
if (n < minunit) {
|
||||||
minunit = n;
|
minunit = n;
|
||||||
mp = ifa;
|
mp = ifa;
|
||||||
|
@ -151,6 +155,7 @@ pcap_lookupdev(char *errbuf)
|
||||||
#else
|
#else
|
||||||
int fd, minunit, n;
|
int fd, minunit, n;
|
||||||
char *cp;
|
char *cp;
|
||||||
|
const char *errstr;
|
||||||
struct ifreq *ifrp, *ifend, *ifnext, *mp;
|
struct ifreq *ifrp, *ifend, *ifnext, *mp;
|
||||||
struct ifconf ifc;
|
struct ifconf ifc;
|
||||||
struct ifreq ibuf[16], ifr;
|
struct ifreq ibuf[16], ifr;
|
||||||
|
@ -216,7 +221,9 @@ pcap_lookupdev(char *errbuf)
|
||||||
|
|
||||||
for (cp = ifrp->ifr_name; !isdigit((unsigned char)*cp); ++cp)
|
for (cp = ifrp->ifr_name; !isdigit((unsigned char)*cp); ++cp)
|
||||||
continue;
|
continue;
|
||||||
n = atoi(cp);
|
n = strtonum(cp, 0, INT_MAX, &errstr);
|
||||||
|
if (errstr != NULL)
|
||||||
|
continue;
|
||||||
if (n < minunit) {
|
if (n < minunit) {
|
||||||
minunit = n;
|
minunit = n;
|
||||||
mp = ifrp;
|
mp = ifrp;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
%{
|
%{
|
||||||
/* $OpenBSD: scanner.l,v 1.30 2024/04/08 02:51:14 jsg Exp $ */
|
/* $OpenBSD: scanner.l,v 1.32 2024/08/29 07:33:50 anton Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||||
|
@ -26,6 +26,7 @@
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <vis.h>
|
#include <vis.h>
|
||||||
|
@ -47,7 +48,6 @@
|
||||||
#include "grammar.h"
|
#include "grammar.h"
|
||||||
|
|
||||||
static int stoi(char *);
|
static int stoi(char *);
|
||||||
static inline int xdtoi(int);
|
|
||||||
|
|
||||||
#ifdef FLEX_SCANNER
|
#ifdef FLEX_SCANNER
|
||||||
#define YY_NO_UNPUT
|
#define YY_NO_UNPUT
|
||||||
|
@ -333,41 +333,23 @@ yywrap(void)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hex digit to integer. */
|
|
||||||
static inline int
|
|
||||||
xdtoi(int c)
|
|
||||||
{
|
|
||||||
if (isdigit(c))
|
|
||||||
return c - '0';
|
|
||||||
else if (islower(c))
|
|
||||||
return c - 'a' + 10;
|
|
||||||
else
|
|
||||||
return c - 'A' + 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert string to integer. Just like atoi(), but checks for
|
* Convert string to integer supporting also octal and hex notations.
|
||||||
* preceding 0x or 0 and uses hex or octal instead of decimal.
|
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
stoi(char *s)
|
stoi(char *s)
|
||||||
{
|
{
|
||||||
int base = 10;
|
long lval;
|
||||||
int n = 0;
|
char *ep;
|
||||||
|
|
||||||
if (*s == '0') {
|
errno = 0;
|
||||||
if (s[1] == 'x' || s[1] == 'X') {
|
lval = strtol(s, &ep, 0);
|
||||||
s += 2;
|
if (*s == '\0' || *ep != '\0')
|
||||||
base = 16;
|
bpf_error("invalid number %s", s);
|
||||||
}
|
if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) ||
|
||||||
else {
|
(lval > INT_MAX || lval < INT_MIN))
|
||||||
base = 8;
|
bpf_error("out of range: %s", s);
|
||||||
s += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (*s)
|
|
||||||
n = n * base + xdtoi(*s++);
|
|
||||||
|
|
||||||
return n;
|
return lval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
# $OpenBSD: Makefile,v 1.12 2023/03/02 20:45:11 tb Exp $
|
# $OpenBSD: Makefile,v 1.13 2024/08/29 16:43:52 tb Exp $
|
||||||
|
|
||||||
PROGS += evp_ecx_test
|
PROGS += evp_ecx_test
|
||||||
PROGS += evp_pkey_check
|
|
||||||
PROGS += evp_pkey_cleanup
|
PROGS += evp_pkey_cleanup
|
||||||
PROGS += evp_test
|
PROGS += evp_test
|
||||||
PROGS += evptest
|
PROGS += evptest
|
||||||
|
|
|
@ -1,397 +0,0 @@
|
||||||
/* $OpenBSD: evp_pkey_check.c,v 1.4 2023/03/02 20:18:40 tb Exp $ */
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2021-2022 Theo Buehler <tb@openbsd.org>
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
|
||||||
* copyright notice and this permission notice appear in all copies.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include <openssl/bn.h>
|
|
||||||
#include <openssl/ec.h>
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include <openssl/evp.h>
|
|
||||||
#include <openssl/rsa.h>
|
|
||||||
|
|
||||||
#define EVP_TEST_RSA_BITS 2048
|
|
||||||
|
|
||||||
static int
|
|
||||||
evp_pkey_check_rsa(void)
|
|
||||||
{
|
|
||||||
EVP_PKEY_CTX *pkey_ctx = NULL;
|
|
||||||
EVP_PKEY *pkey = NULL;
|
|
||||||
RSA *rsa = NULL;
|
|
||||||
BIGNUM *rsa_d;
|
|
||||||
int ret;
|
|
||||||
int fail_soft = 0;
|
|
||||||
int failed = 1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Generate a run-off-the-mill RSA key.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((pkey_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL)) == NULL) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_CTX_new_id()\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (EVP_PKEY_keygen_init(pkey_ctx) <= 0) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_keygen_init\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (!EVP_PKEY_CTX_set_rsa_keygen_bits(pkey_ctx, EVP_TEST_RSA_BITS)) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_CTX_set_rsa_keygen_bits\n",
|
|
||||||
__func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (EVP_PKEY_keygen(pkey_ctx, &pkey) <= 0) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_keygen\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* At this point, no pkey is set on pkey_ctx, we should fail with 0. */
|
|
||||||
if (EVP_PKEY_check(pkey_ctx) != 0) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_check() succeeded without pkey\n",
|
|
||||||
__func__);
|
|
||||||
ERR_print_errors_fp(stderr);
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ERR_clear_error();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a new EVP_PKEY_CTX with pkey set.
|
|
||||||
*/
|
|
||||||
|
|
||||||
EVP_PKEY_CTX_free(pkey_ctx);
|
|
||||||
if ((pkey_ctx = EVP_PKEY_CTX_new(pkey, NULL)) == NULL) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_CTX_new\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The freshly generated pkey is set on pkey_ctx. We should succeed. */
|
|
||||||
if ((ret = EVP_PKEY_check(pkey_ctx)) <= 0) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_check(), generated pkey: %d\n",
|
|
||||||
__func__, ret);
|
|
||||||
ERR_print_errors_fp(stderr);
|
|
||||||
ERR_clear_error();
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Public key checking for RSA is not supported. */
|
|
||||||
if (EVP_PKEY_public_check(pkey_ctx) != -2) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"%s: EVP_PKEY_public_check() supported for RSA?\n",
|
|
||||||
__func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
ERR_clear_error();
|
|
||||||
|
|
||||||
/* Parameter checking for RSA is not supported. */
|
|
||||||
if (EVP_PKEY_param_check(pkey_ctx) != -2) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"%s: EVP_PKEY_param_check() supported for RSA?\n",
|
|
||||||
__func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
ERR_clear_error();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now modify the RSA key a bit. The check should then fail.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((rsa = EVP_PKEY_get0_RSA(pkey)) == NULL) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_get0_RSA\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
/* We're lazy and modify rsa->d directly, hence the ugly cast. */
|
|
||||||
if ((rsa_d = (BIGNUM *)RSA_get0_d(rsa)) == NULL) {
|
|
||||||
fprintf(stderr, "%s: RSA_get0_d()\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (!BN_add_word(rsa_d, 2)) {
|
|
||||||
fprintf(stderr, "%s: BN_add_word\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Since (d+2) * e != 1 mod (p-1)*(q-1), we should fail */
|
|
||||||
if (EVP_PKEY_check(pkey_ctx) == 1) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_check success with modified d\n",
|
|
||||||
__func__);
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ERR_peek_error() == 0) {
|
|
||||||
fprintf(stderr, "%s: expected some RSA errors\n", __func__);
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
ERR_clear_error();
|
|
||||||
|
|
||||||
failed = 0;
|
|
||||||
|
|
||||||
err:
|
|
||||||
EVP_PKEY_CTX_free(pkey_ctx);
|
|
||||||
EVP_PKEY_free(pkey);
|
|
||||||
|
|
||||||
return failed | fail_soft;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
evp_pkey_check_ec(void)
|
|
||||||
{
|
|
||||||
EVP_PKEY_CTX *pkey_ctx = NULL;
|
|
||||||
EVP_PKEY *pkey = NULL;
|
|
||||||
EC_KEY *eckey = NULL;
|
|
||||||
BIGNUM *private_key = NULL;
|
|
||||||
EC_GROUP *group;
|
|
||||||
const EC_POINT *generator;
|
|
||||||
BIGNUM *cofactor = NULL, *order = NULL;
|
|
||||||
int ret;
|
|
||||||
int fail_soft = 0;
|
|
||||||
int failed = 1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Generate an elliptic curve key on secp384r1
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((pkey_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL)) == NULL) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_CTX_new_id\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (EVP_PKEY_keygen_init(pkey_ctx) <= 0) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_keygen_init\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pkey_ctx,
|
|
||||||
NID_secp384r1) <= 0) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_CTX_set_ec_paramgen_curve_nid\n",
|
|
||||||
__func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (EVP_PKEY_keygen(pkey_ctx, &pkey) <= 0) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_keygen\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* At this point, no pkey is set on pkey_ctx, we should fail with 0. */
|
|
||||||
if (EVP_PKEY_check(pkey_ctx) != 0) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_check() succeeded without pkey\n",
|
|
||||||
__func__);
|
|
||||||
ERR_print_errors_fp(stderr);
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ERR_clear_error();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a new EVP_PKEY_CTX with pkey set.
|
|
||||||
*/
|
|
||||||
|
|
||||||
EVP_PKEY_CTX_free(pkey_ctx);
|
|
||||||
if ((pkey_ctx = EVP_PKEY_CTX_new(pkey, NULL)) == NULL) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_CTX_new\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The freshly generated pkey is set on pkey_ctx. We should succeed. */
|
|
||||||
if ((ret = EVP_PKEY_check(pkey_ctx)) <= 0) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_check(), generated pkey: %d\n",
|
|
||||||
__func__, ret);
|
|
||||||
ERR_print_errors_fp(stderr);
|
|
||||||
ERR_clear_error();
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We should also succeed the public check. */
|
|
||||||
if ((ret = EVP_PKEY_public_check(pkey_ctx)) <= 0) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"%s: EVP_PKEY_public_check(), generated pkey: %d\n",
|
|
||||||
__func__, ret);
|
|
||||||
ERR_print_errors_fp(stderr);
|
|
||||||
ERR_clear_error();
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We should also succeed the parameter check. */
|
|
||||||
if ((ret = EVP_PKEY_param_check(pkey_ctx)) <= 0) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"%s: EVP_PKEY_param_check(), generated pkey: %d\n",
|
|
||||||
__func__, ret);
|
|
||||||
ERR_print_errors_fp(stderr);
|
|
||||||
ERR_clear_error();
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Modify the private key slightly.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((eckey = EVP_PKEY_get0_EC_KEY(pkey)) == NULL) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_get0_EC_KEY\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We're lazy and modify the private key directly. */
|
|
||||||
if ((private_key = (BIGNUM *)EC_KEY_get0_private_key(eckey)) == NULL) {
|
|
||||||
fprintf(stderr, "%s: EC_KEY_get0_private_key\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The private key is a random number in [1, order). Preserve this
|
|
||||||
* property by adding 1 if it is equal to 1 and subtracting 1 otherwise.
|
|
||||||
*/
|
|
||||||
if (BN_cmp(private_key, BN_value_one()) == 0) {
|
|
||||||
if (!BN_add_word(private_key, 1)) {
|
|
||||||
fprintf(stderr, "%s: BN_add_word\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!BN_sub_word(private_key, 1)) {
|
|
||||||
fprintf(stderr, "%s: BN_sub_word\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Generator times private key will no longer be equal to public key. */
|
|
||||||
if (EVP_PKEY_check(pkey_ctx) == 1) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_check succeeded unexpectedly\n",
|
|
||||||
__func__);
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ERR_peek_error() == 0) {
|
|
||||||
fprintf(stderr, "%s: expected a private key error\n", __func__);
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
ERR_clear_error();
|
|
||||||
|
|
||||||
/* EVP_PKEY_public_check checks the private key (sigh), so we fail. */
|
|
||||||
if (EVP_PKEY_public_check(pkey_ctx) == 1) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"%s: EVP_PKEY_public_check succeeded unexpectedly\n",
|
|
||||||
__func__);
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We should still succeed the parameter check. */
|
|
||||||
if ((ret = EVP_PKEY_param_check(pkey_ctx)) <= 0) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"%s: EVP_PKEY_param_check(), modified privkey pkey: %d\n",
|
|
||||||
__func__, ret);
|
|
||||||
ERR_print_errors_fp(stderr);
|
|
||||||
ERR_clear_error();
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Now set the private key to NULL. The API will think malloc failed. */
|
|
||||||
if (EC_KEY_set_private_key(eckey, NULL) != 0) {
|
|
||||||
fprintf(stderr, "%s: EC_KEY_set_private_key succeeded?!",
|
|
||||||
__func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* EVP_PKEY_public_check now only checks that the public key is on the
|
|
||||||
* curve. We should succeed again.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((ret = EVP_PKEY_public_check(pkey_ctx)) <= 0) {
|
|
||||||
fprintf(stderr, "%s: EVP_PKEY_check(), generated pkey: %d\n",
|
|
||||||
__func__, ret);
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ERR_clear_error();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now let's modify the group to trip the parameter check.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((group = (EC_GROUP *)EC_KEY_get0_group(eckey)) == NULL) {
|
|
||||||
fprintf(stderr, "%s: EC_KEY_get0_group() failed\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((generator = EC_GROUP_get0_generator(group)) == NULL) {
|
|
||||||
fprintf(stderr, "%s: EC_GROUP_get0_generator() failed\n",
|
|
||||||
__func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((order = BN_new()) == NULL) {
|
|
||||||
fprintf(stderr, "%s: order = BN_new() failed\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if ((cofactor = BN_new()) == NULL) {
|
|
||||||
fprintf(stderr, "%s: cofactor = BN_new() failed\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!EC_GROUP_get_order(group, order, NULL)) {
|
|
||||||
fprintf(stderr, "%s: EC_GROUP_get_order() failed\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (!EC_GROUP_get_cofactor(group, cofactor, NULL)) {
|
|
||||||
fprintf(stderr, "%s: EC_GROUP_get_cofactor() failed\n",
|
|
||||||
__func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Decrement order so order * generator != (point at infinity). */
|
|
||||||
if (!BN_sub_word(order, 1)) {
|
|
||||||
fprintf(stderr, "%s: BN_sub_word() failed\n", __func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Now set this nonsense on the group. */
|
|
||||||
if (!EC_GROUP_set_generator(group, generator, order, cofactor)) {
|
|
||||||
fprintf(stderr, "%s: EC_GROUP_set_generator() failed\n",
|
|
||||||
__func__);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We should now fail the parameter check. */
|
|
||||||
if (EVP_PKEY_param_check(pkey_ctx) == 1) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"%s: EVP_PKEY_param_check(), succeeded unexpectedly\n",
|
|
||||||
__func__);
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ERR_peek_error() == 0) {
|
|
||||||
fprintf(stderr, "%s: expected a group order error\n", __func__);
|
|
||||||
fail_soft = 1;
|
|
||||||
}
|
|
||||||
ERR_clear_error();
|
|
||||||
|
|
||||||
failed = 0;
|
|
||||||
|
|
||||||
err:
|
|
||||||
EVP_PKEY_CTX_free(pkey_ctx);
|
|
||||||
EVP_PKEY_free(pkey);
|
|
||||||
BN_free(order);
|
|
||||||
BN_free(cofactor);
|
|
||||||
|
|
||||||
return failed | fail_soft;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(void)
|
|
||||||
{
|
|
||||||
int failed = 0;
|
|
||||||
|
|
||||||
failed |= evp_pkey_check_rsa();
|
|
||||||
failed |= evp_pkey_check_ec();
|
|
||||||
|
|
||||||
return failed;
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: test.h,v 1.6 2012/04/13 10:15:49 guenther Exp $ */
|
/* $OpenBSD: test.h,v 1.7 2024/08/29 15:18:17 claudio Exp $ */
|
||||||
|
|
||||||
#ifndef _h_test_
|
#ifndef _h_test_
|
||||||
#define _h_test_
|
#define _h_test_
|
||||||
|
@ -14,7 +14,8 @@
|
||||||
static void __vpanic(const char *, const char *, const char *,
|
static void __vpanic(const char *, const char *, const char *,
|
||||||
int, const char *, va_list) __attribute__((__noreturn__));
|
int, const char *, va_list) __attribute__((__noreturn__));
|
||||||
static void __panic(const char *, const char *, const char *,
|
static void __panic(const char *, const char *, const char *,
|
||||||
int, const char *, ...) __attribute__((__noreturn__));
|
int, const char *, ...) __attribute__((__noreturn__))
|
||||||
|
__attribute__((__format__ (printf, 5, 6)));
|
||||||
|
|
||||||
#if defined(__OpenBSD__) || defined(__FreeBSD__)
|
#if defined(__OpenBSD__) || defined(__FreeBSD__)
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
@ -33,13 +34,8 @@ void _thread_sys__exit(int) __attribute__((__noreturn__));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
__vpanic(type, errstr, filenm, lineno, fmt, ap)
|
__vpanic(const char *type, const char *errstr, const char *filenm, int lineno,
|
||||||
const char *type;
|
const char *fmt, va_list ap)
|
||||||
const char *errstr;
|
|
||||||
const char *filenm;
|
|
||||||
int lineno;
|
|
||||||
const char *fmt;
|
|
||||||
va_list ap;
|
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
|
|
||||||
|
@ -62,12 +58,8 @@ __vpanic(type, errstr, filenm, lineno, fmt, ap)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
__panic(type, errstr, filenm, lineno, fmt)
|
__panic(const char *type, const char *errstr, const char *filenm, int lineno,
|
||||||
const char *type;
|
const char *fmt, ...)
|
||||||
const char *errstr;
|
|
||||||
const char *filenm;
|
|
||||||
int lineno;
|
|
||||||
const char *fmt;
|
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: siginfo.c,v 1.11 2016/09/01 11:04:37 guenther Exp $ */
|
/* $OpenBSD: siginfo.c,v 1.12 2024/08/29 15:16:43 claudio Exp $ */
|
||||||
/* PUBLIC DOMAIN Oct 2002 <marc@snafu.org> */
|
/* PUBLIC DOMAIN Oct 2002 <marc@snafu.org> */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -19,16 +19,14 @@ static void
|
||||||
act_handler(int signal, siginfo_t *siginfo, void *context)
|
act_handler(int signal, siginfo_t *siginfo, void *context)
|
||||||
{
|
{
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
char * str;
|
|
||||||
|
|
||||||
CHECKe(sigaction(SIGSEGV, NULL, &sa));
|
CHECKe(sigaction(SIGSEGV, NULL, &sa));
|
||||||
ASSERT(sa.sa_handler == SIG_DFL);
|
ASSERT(sa.sa_handler == SIG_DFL);
|
||||||
ASSERT(siginfo != NULL);
|
ASSERT(siginfo != NULL);
|
||||||
asprintf(&str, "act_handler: signal %d, siginfo %p, context %p\n"
|
dprintf(STDOUT_FILENO, "act_handler: signal %d, siginfo %p, "
|
||||||
"addr %p, code %d, trap %d\n", signal, siginfo, context,
|
"context %p\naddr %p, code %d, trap %d\n", signal, siginfo,
|
||||||
siginfo->si_addr, siginfo->si_code, siginfo->si_trapno);
|
context, siginfo->si_addr, siginfo->si_code,
|
||||||
write(STDOUT_FILENO, str, strlen(str));
|
siginfo->si_trapno);
|
||||||
free(str);
|
|
||||||
ASSERT(siginfo->si_addr == BOGUS);
|
ASSERT(siginfo->si_addr == BOGUS);
|
||||||
ASSERT(siginfo->si_code == SEGV_MAPERR ||
|
ASSERT(siginfo->si_code == SEGV_MAPERR ||
|
||||||
siginfo->si_code == SEGV_ACCERR);
|
siginfo->si_code == SEGV_ACCERR);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $OpenBSD: Makefile,v 1.12 2024/06/15 08:39:47 tb Exp $
|
# $OpenBSD: Makefile,v 1.13 2024/08/29 17:16:40 tb Exp $
|
||||||
|
|
||||||
OPENSSL_RUBY_TESTS = /usr/local/share/openssl-ruby-tests
|
OPENSSL_RUBY_TESTS = /usr/local/share/openssl-ruby-tests
|
||||||
.if exists(/usr/local/bin/ruby32)
|
.if exists(/usr/local/bin/ruby32)
|
||||||
|
@ -37,7 +37,8 @@ ${_BUILD_COOKIE}: ${_BUILDDIR_COOKIE}
|
||||||
make;
|
make;
|
||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
OPENSSL_RUBY_TESTSRC = ${OPENSSL_RUBY_TESTS}/test/openssl/test_*.rb
|
# XXX - remove [^c] after bump
|
||||||
|
OPENSSL_RUBY_TESTSRC = ${OPENSSL_RUBY_TESTS}/test/openssl/test_*[^c].rb
|
||||||
${_TEST_COOKIE}: ${_BUILD_COOKIE} ${_BUILDDIR_COOKIE}
|
${_TEST_COOKIE}: ${_BUILD_COOKIE} ${_BUILDDIR_COOKIE}
|
||||||
cd ${BUILDDIR} && \
|
cd ${BUILDDIR} && \
|
||||||
env SKIP_EXPECTED_FAILURES=true ${RUBY} -I. \
|
env SKIP_EXPECTED_FAILURES=true ${RUBY} -I. \
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
# $OpenBSD: Makefile,v 1.8 2022/01/12 15:32:15 martijn Exp $
|
# $OpenBSD: Makefile,v 1.9 2024/08/28 14:32:02 millert Exp $
|
||||||
# $NetBSD: Makefile,v 1.1 2005/04/04 16:48:45 peter Exp $
|
# $NetBSD: Makefile,v 1.1 2005/04/04 16:48:45 peter Exp $
|
||||||
|
|
||||||
SED?= /usr/bin/sed
|
SED?= /usr/bin/sed
|
||||||
|
|
||||||
REGRESS_TARGETS= sedtest substitute hanoi math sierpinski negation \
|
REGRESS_TARGETS= sedtest substitute hanoi math sierpinski negation \
|
||||||
inplace inplace2 inplace3 commandl1 commandl2 commandc1 commandD1
|
inplace inplace2 inplace3 commandl1 commandl2 commandc1 commandD1 \
|
||||||
|
commandD2
|
||||||
|
|
||||||
commandc1:
|
commandc1:
|
||||||
# New tests, currently failing, need fixes in sed.
|
# New tests, currently failing, need fixes in sed.
|
||||||
|
@ -64,6 +65,10 @@ commandD1:
|
||||||
printf 'a\nbb\n' | ${SED} -f ${.CURDIR}/$@.sed > $@.out
|
printf 'a\nbb\n' | ${SED} -f ${.CURDIR}/$@.sed > $@.out
|
||||||
diff ${.CURDIR}/$@.expected $@.out
|
diff ${.CURDIR}/$@.expected $@.out
|
||||||
|
|
||||||
|
commandD2:
|
||||||
|
printf 'a\nbb\n\n' | ${SED} -f ${.CURDIR}/$@.sed > $@.out
|
||||||
|
diff ${.CURDIR}/$@.expected $@.out
|
||||||
|
|
||||||
CLEANFILES+=*.out lines* script* *.txt
|
CLEANFILES+=*.out lines* script* *.txt
|
||||||
|
|
||||||
.include <bsd.regress.mk>
|
.include <bsd.regress.mk>
|
||||||
|
|
3
regress/usr.bin/sed/commandD2.expected
Normal file
3
regress/usr.bin/sed/commandD2.expected
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
a
|
||||||
|
bb
|
||||||
|
|
1
regress/usr.bin/sed/commandD2.sed
Normal file
1
regress/usr.bin/sed/commandD2.sed
Normal file
|
@ -0,0 +1 @@
|
||||||
|
s/^//p;$!N;D
|
|
@ -1,4 +1,4 @@
|
||||||
# $OpenBSD: rekey.sh,v 1.29 2024/08/22 10:21:02 dtucker Exp $
|
# $OpenBSD: rekey.sh,v 1.30 2024/08/28 12:08:26 djm Exp $
|
||||||
# Placed in the Public Domain.
|
# Placed in the Public Domain.
|
||||||
|
|
||||||
tid="rekey"
|
tid="rekey"
|
||||||
|
@ -184,7 +184,7 @@ for size in 16 1k 1K 1m 1M 1g 1G 4G 8G; do
|
||||||
4g|4G) bytes=4294967296 ;;
|
4g|4G) bytes=4294967296 ;;
|
||||||
8g|8G) bytes=8589934592 ;;
|
8g|8G) bytes=8589934592 ;;
|
||||||
esac
|
esac
|
||||||
b=`${SSH} -G -o "rekeylimit $size" -f $OBJ/ssh_proxy host | \
|
b=`${SSH} -G -o "rekeylimit $size" -F $OBJ/ssh_proxy host | \
|
||||||
awk '/rekeylimit/{print $2}'`
|
awk '/rekeylimit/{print $2}'`
|
||||||
if [ "$bytes" != "$b" ]; then
|
if [ "$bytes" != "$b" ]; then
|
||||||
fatal "rekeylimit size: expected $bytes bytes got $b"
|
fatal "rekeylimit size: expected $bytes bytes got $b"
|
||||||
|
@ -200,7 +200,7 @@ for time in 1 1m 1M 1h 1H 1d 1D 1w 1W; do
|
||||||
1d|1D) seconds=86400 ;;
|
1d|1D) seconds=86400 ;;
|
||||||
1w|1W) seconds=604800 ;;
|
1w|1W) seconds=604800 ;;
|
||||||
esac
|
esac
|
||||||
s=`${SSH} -G -o "rekeylimit default $time" -f $OBJ/ssh_proxy host | \
|
s=`${SSH} -G -o "rekeylimit default $time" -F $OBJ/ssh_proxy host | \
|
||||||
awk '/rekeylimit/{print $3}'`
|
awk '/rekeylimit/{print $3}'`
|
||||||
if [ "$seconds" != "$s" ]; then
|
if [ "$seconds" != "$s" ]; then
|
||||||
fatal "rekeylimit time: expected $time seconds got $s"
|
fatal "rekeylimit time: expected $time seconds got $s"
|
||||||
|
|
|
@ -7,7 +7,7 @@ log updates
|
||||||
neighbor 10.12.57.1 {
|
neighbor 10.12.57.1 {
|
||||||
descr "RDOMAIN1"
|
descr "RDOMAIN1"
|
||||||
remote-as 4200000001
|
remote-as 4200000001
|
||||||
max-prefix 2
|
#MAX-PREFIX#
|
||||||
}
|
}
|
||||||
|
|
||||||
deny from any
|
deny from any
|
||||||
|
|
|
@ -7,7 +7,7 @@ log updates
|
||||||
neighbor 10.12.57.2 {
|
neighbor 10.12.57.2 {
|
||||||
descr "RDOMAIN2"
|
descr "RDOMAIN2"
|
||||||
remote-as 4200000002
|
remote-as 4200000002
|
||||||
max-prefix 2 out
|
#MAX-PREFIX#
|
||||||
}
|
}
|
||||||
|
|
||||||
deny from any
|
deny from any
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/ksh
|
#!/bin/ksh
|
||||||
# $OpenBSD: maxprefix.sh,v 1.3 2023/02/15 14:19:08 claudio Exp $
|
# $OpenBSD: maxprefix.sh,v 1.4 2024/08/28 13:14:39 claudio Exp $
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
@ -64,12 +64,14 @@ ifconfig ${PAIR1} patch ${PAIR2}
|
||||||
ifconfig lo${RDOMAIN1} inet 127.0.0.1/8
|
ifconfig lo${RDOMAIN1} inet 127.0.0.1/8
|
||||||
ifconfig lo${RDOMAIN2} inet 127.0.0.1/8
|
ifconfig lo${RDOMAIN2} inet 127.0.0.1/8
|
||||||
|
|
||||||
echo run bgpds
|
echo test1: run bgpds
|
||||||
|
sed -e 's/#MAX-PREFIX#/max-prefix 2/' \
|
||||||
|
${BGPDCONFIGDIR}/bgpd.maxprefix.rdomain2.conf > \
|
||||||
|
./bgpd.maxprefix.rdomain2.conf
|
||||||
route -T ${RDOMAIN1} exec ${BGPD} \
|
route -T ${RDOMAIN1} exec ${BGPD} \
|
||||||
-v -f ${BGPDCONFIGDIR}/bgpd.maxprefix.rdomain1.conf
|
-v -f ${BGPDCONFIGDIR}/bgpd.maxprefix.rdomain1.conf
|
||||||
route -T ${RDOMAIN2} exec ${BGPD} \
|
route -T ${RDOMAIN2} exec ${BGPD} \
|
||||||
-v -f ${BGPDCONFIGDIR}/bgpd.maxprefix.rdomain2.conf
|
-v -f ./bgpd.maxprefix.rdomain2.conf
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
route -T ${RDOMAIN1} exec bgpctl nei RDOMAIN2 up
|
route -T ${RDOMAIN1} exec bgpctl nei RDOMAIN2 up
|
||||||
sleep 1
|
sleep 1
|
||||||
|
@ -87,3 +89,38 @@ route -T ${RDOMAIN1} exec bgpctl network add 10.12.60.0/24
|
||||||
sleep 1
|
sleep 1
|
||||||
route -T ${RDOMAIN1} exec bgpctl show nei | \
|
route -T ${RDOMAIN1} exec bgpctl show nei | \
|
||||||
grep '^ Last error received: Cease, received max-prefix exceeded'
|
grep '^ Last error received: Cease, received max-prefix exceeded'
|
||||||
|
|
||||||
|
echo test1: cleanup
|
||||||
|
pkill -T ${RDOMAIN1} bgpd || true
|
||||||
|
pkill -T ${RDOMAIN2} bgpd || true
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
echo test2: run bgpds
|
||||||
|
sed -e 's/#MAX-PREFIX#/max-prefix 10/' \
|
||||||
|
${BGPDCONFIGDIR}/bgpd.maxprefix.rdomain2.conf > \
|
||||||
|
./bgpd.maxprefix.rdomain2.conf
|
||||||
|
route -T ${RDOMAIN1} exec ${BGPD} \
|
||||||
|
-v -f ${BGPDCONFIGDIR}/bgpd.maxprefix.rdomain1.conf
|
||||||
|
route -T ${RDOMAIN2} exec ${BGPD} \
|
||||||
|
-v -f ./bgpd.maxprefix.rdomain2.conf
|
||||||
|
sleep 1
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl nei RDOMAIN2 up
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
echo test2: add three networks
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl network add 10.12.58.0/24
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl network add 10.12.59.0/24
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl network add 10.12.60.0/24
|
||||||
|
sleep 1
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl show nei | \
|
||||||
|
awk '/^ Prefixes/ { if ($2 == "3") { print "ok"; ok=1; exit 0; } }
|
||||||
|
END { if (ok != 1) { print "bad bgpctl output"; exit 2; } }'
|
||||||
|
|
||||||
|
echo test2: reload config
|
||||||
|
sed -e 's/#MAX-PREFIX#/max-prefix 2/' \
|
||||||
|
${BGPDCONFIGDIR}/bgpd.maxprefix.rdomain2.conf > \
|
||||||
|
./bgpd.maxprefix.rdomain2.conf
|
||||||
|
route -T ${RDOMAIN2} exec bgpctl reload
|
||||||
|
sleep 1
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl show nei | \
|
||||||
|
grep '^ Last error received: Cease, received max-prefix exceeded'
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/ksh
|
#!/bin/ksh
|
||||||
# $OpenBSD: maxprefixout.sh,v 1.2 2023/02/15 14:19:08 claudio Exp $
|
# $OpenBSD: maxprefixout.sh,v 1.3 2024/08/28 13:14:39 claudio Exp $
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
@ -64,9 +64,12 @@ ifconfig ${PAIR1} patch ${PAIR2}
|
||||||
ifconfig lo${RDOMAIN1} inet 127.0.0.1/8
|
ifconfig lo${RDOMAIN1} inet 127.0.0.1/8
|
||||||
ifconfig lo${RDOMAIN2} inet 127.0.0.1/8
|
ifconfig lo${RDOMAIN2} inet 127.0.0.1/8
|
||||||
|
|
||||||
echo run bgpds
|
echo test1: run bgpds
|
||||||
|
sed -e 's/#MAX-PREFIX#/max-prefix 2 out/' \
|
||||||
|
${BGPDCONFIGDIR}/bgpd.maxprefixout.rdomain1.conf > \
|
||||||
|
./bgpd.maxprefixout.rdomain1.conf
|
||||||
route -T ${RDOMAIN1} exec ${BGPD} \
|
route -T ${RDOMAIN1} exec ${BGPD} \
|
||||||
-v -f ${BGPDCONFIGDIR}/bgpd.maxprefixout.rdomain1.conf
|
-v -f ./bgpd.maxprefixout.rdomain1.conf
|
||||||
route -T ${RDOMAIN2} exec ${BGPD} \
|
route -T ${RDOMAIN2} exec ${BGPD} \
|
||||||
-v -f ${BGPDCONFIGDIR}/bgpd.maxprefixout.rdomain2.conf
|
-v -f ${BGPDCONFIGDIR}/bgpd.maxprefixout.rdomain2.conf
|
||||||
|
|
||||||
|
@ -87,3 +90,39 @@ route -T ${RDOMAIN1} exec bgpctl network add 10.12.60.0/24
|
||||||
sleep 1
|
sleep 1
|
||||||
route -T ${RDOMAIN1} exec bgpctl show nei | \
|
route -T ${RDOMAIN1} exec bgpctl show nei | \
|
||||||
grep '^ Last error sent: Cease, sent max-prefix exceeded'
|
grep '^ Last error sent: Cease, sent max-prefix exceeded'
|
||||||
|
|
||||||
|
echo test1: cleanup
|
||||||
|
pkill -T ${RDOMAIN1} bgpd || true
|
||||||
|
pkill -T ${RDOMAIN2} bgpd || true
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
echo test2: run bgpds
|
||||||
|
sed -e 's/#MAX-PREFIX#/max-prefix 20 out/' \
|
||||||
|
${BGPDCONFIGDIR}/bgpd.maxprefixout.rdomain1.conf > \
|
||||||
|
./bgpd.maxprefixout.rdomain1.conf
|
||||||
|
route -T ${RDOMAIN1} exec ${BGPD} \
|
||||||
|
-v -f ./bgpd.maxprefixout.rdomain1.conf
|
||||||
|
route -T ${RDOMAIN2} exec ${BGPD} \
|
||||||
|
-v -f ${BGPDCONFIGDIR}/bgpd.maxprefixout.rdomain2.conf
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl nei RDOMAIN2 up
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
echo test2: add three networks
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl network add 10.12.58.0/24
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl network add 10.12.59.0/24
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl network add 10.12.60.0/24
|
||||||
|
sleep 1
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl show nei | \
|
||||||
|
awk '/^ Prefixes/ { if ($2 == "3") { print "ok"; ok=1; exit 0; } }
|
||||||
|
END { if (ok != 1) { print "bad bgpctl output"; exit 2; } }'
|
||||||
|
|
||||||
|
echo test2: reload config
|
||||||
|
sed -e 's/#MAX-PREFIX#/max-prefix 2 out/' \
|
||||||
|
${BGPDCONFIGDIR}/bgpd.maxprefixout.rdomain1.conf > \
|
||||||
|
./bgpd.maxprefixout.rdomain1.conf
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl reload
|
||||||
|
sleep 1
|
||||||
|
route -T ${RDOMAIN1} exec bgpctl show nei | \
|
||||||
|
grep '^ Last error sent: Cease, sent max-prefix exceeded'
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: bus_dma.c,v 1.57 2024/08/22 11:36:24 bluhm Exp $ */
|
/* $OpenBSD: bus_dma.c,v 1.58 2024/08/28 18:21:15 bluhm Exp $ */
|
||||||
/* $NetBSD: bus_dma.c,v 1.3 2003/05/07 21:33:58 fvdl Exp $ */
|
/* $NetBSD: bus_dma.c,v 1.3 2003/05/07 21:33:58 fvdl Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -726,7 +726,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
|
||||||
|
|
||||||
if (use_bounce_buffer) {
|
if (use_bounce_buffer) {
|
||||||
if (page >= map->_dm_npages)
|
if (page >= map->_dm_npages)
|
||||||
return (ENOMEM);
|
return (EFBIG);
|
||||||
|
|
||||||
off = vaddr & PAGE_MASK;
|
off = vaddr & PAGE_MASK;
|
||||||
pg = map->_dm_pages[page];
|
pg = map->_dm_pages[page];
|
||||||
|
|
|
@ -1384,6 +1384,12 @@ bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev)
|
||||||
if (amdgpu_sriov_vf(adev))
|
if (amdgpu_sriov_vf(adev))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
/* XXX VEGA10 S3 fails if reset is done */
|
||||||
|
if (pm_suspend_target_state == PM_SUSPEND_MEM)
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_SUSPEND)
|
#if IS_ENABLED(CONFIG_SUSPEND)
|
||||||
return pm_suspend_target_state != PM_SUSPEND_TO_IDLE;
|
return pm_suspend_target_state != PM_SUSPEND_TO_IDLE;
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -3491,8 +3491,9 @@ amdgpu_init_backlight(struct amdgpu_device *adev)
|
||||||
void
|
void
|
||||||
amdgpu_attachhook(struct device *self)
|
amdgpu_attachhook(struct device *self)
|
||||||
{
|
{
|
||||||
struct amdgpu_device *adev = (struct amdgpu_device *)self;
|
struct amdgpu_device *adev = (struct amdgpu_device *)self;
|
||||||
struct drm_device *dev = &adev->ddev;
|
struct drm_device *dev = &adev->ddev;
|
||||||
|
struct pci_dev *pdev = adev->pdev;
|
||||||
int r, acpi_status;
|
int r, acpi_status;
|
||||||
struct rasops_info *ri = &adev->ro;
|
struct rasops_info *ri = &adev->ro;
|
||||||
struct drm_fb_helper *fb_helper;
|
struct drm_fb_helper *fb_helper;
|
||||||
|
@ -3500,7 +3501,7 @@ amdgpu_attachhook(struct device *self)
|
||||||
struct drm_gem_object *obj;
|
struct drm_gem_object *obj;
|
||||||
struct amdgpu_bo *rbo;
|
struct amdgpu_bo *rbo;
|
||||||
|
|
||||||
dev_set_drvdata(self, dev);
|
pci_set_drvdata(pdev, dev);
|
||||||
|
|
||||||
r = amdgpu_driver_load_kms(adev, adev->flags);
|
r = amdgpu_driver_load_kms(adev, adev->flags);
|
||||||
if (r)
|
if (r)
|
||||||
|
|
|
@ -1407,6 +1407,7 @@ drm_attach(struct device *parent, struct device *self, void *aux)
|
||||||
dev->pdev->pc = pa->pa_pc;
|
dev->pdev->pc = pa->pa_pc;
|
||||||
dev->pdev->tag = pa->pa_tag;
|
dev->pdev->tag = pa->pa_tag;
|
||||||
dev->pdev->pci = (struct pci_softc *)parent->dv_parent;
|
dev->pdev->pci = (struct pci_softc *)parent->dv_parent;
|
||||||
|
dev->pdev->_dev = parent;
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
dev->pdev->dev.node = acpi_find_pci(pa->pa_pc, pa->pa_tag);
|
dev->pdev->dev.node = acpi_find_pci(pa->pa_pc, pa->pa_tag);
|
||||||
|
|
|
@ -2307,6 +2307,8 @@ inteldrm_attach(struct device *parent, struct device *self, void *aux)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pci_set_drvdata(dev->pdev, dev_priv);
|
||||||
|
|
||||||
/* Device parameters start as a copy of module parameters. */
|
/* Device parameters start as a copy of module parameters. */
|
||||||
i915_params_copy(&dev_priv->params, &i915_modparams);
|
i915_params_copy(&dev_priv->params, &i915_modparams);
|
||||||
dev_priv->params.request_timeout_ms = 0;
|
dev_priv->params.request_timeout_ms = 0;
|
||||||
|
|
|
@ -449,11 +449,7 @@ static inline struct drm_i915_private *kdev_to_i915(struct device *kdev)
|
||||||
|
|
||||||
static inline struct drm_i915_private *pdev_to_i915(struct pci_dev *pdev)
|
static inline struct drm_i915_private *pdev_to_i915(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
STUB();
|
|
||||||
return NULL;
|
|
||||||
#ifdef notyet
|
|
||||||
return pci_get_drvdata(pdev);
|
return pci_get_drvdata(pdev);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct intel_gt *to_gt(struct drm_i915_private *i915)
|
static inline struct intel_gt *to_gt(struct drm_i915_private *i915)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: pci.h,v 1.17 2024/08/16 10:46:46 kettenis Exp $ */
|
/* $OpenBSD: pci.h,v 1.18 2024/08/28 04:55:45 jsg Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015 Mark Kettenis
|
* Copyright (c) 2015 Mark Kettenis
|
||||||
*
|
*
|
||||||
|
@ -33,6 +33,7 @@
|
||||||
#include <linux/kobject.h>
|
#include <linux/kobject.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/mod_devicetable.h>
|
#include <linux/mod_devicetable.h>
|
||||||
|
#include <linux/device.h>
|
||||||
|
|
||||||
struct pci_dev;
|
struct pci_dev;
|
||||||
|
|
||||||
|
@ -70,6 +71,7 @@ struct pci_dev {
|
||||||
uint8_t ltr_path;
|
uint8_t ltr_path;
|
||||||
|
|
||||||
struct pci_acpi dev;
|
struct pci_acpi dev;
|
||||||
|
struct device *_dev;
|
||||||
};
|
};
|
||||||
#define PCI_ANY_ID (uint16_t) (~0U)
|
#define PCI_ANY_ID (uint16_t) (~0U)
|
||||||
|
|
||||||
|
@ -457,6 +459,13 @@ pci_is_thunderbolt_attached(struct pci_dev *pdev)
|
||||||
static inline void
|
static inline void
|
||||||
pci_set_drvdata(struct pci_dev *pdev, void *data)
|
pci_set_drvdata(struct pci_dev *pdev, void *data)
|
||||||
{
|
{
|
||||||
|
dev_set_drvdata(pdev->_dev, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
pci_get_drvdata(struct pci_dev *pdev)
|
||||||
|
{
|
||||||
|
return dev_get_drvdata(pdev->_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
|
|
|
@ -1273,10 +1273,11 @@ radeondrm_attachhook(struct device *self)
|
||||||
|
|
||||||
task_set(&rdev->switchtask, radeondrm_doswitch, ri);
|
task_set(&rdev->switchtask, radeondrm_doswitch, ri);
|
||||||
|
|
||||||
/*
|
/* from linux radeon_pci_probe() */
|
||||||
* in linux via radeon_pci_probe -> drm_get_pci_dev -> drm_dev_register
|
|
||||||
*/
|
pci_set_drvdata(dev->pdev, dev);
|
||||||
drm_dev_register(rdev->ddev, rdev->flags);
|
|
||||||
|
drm_dev_register(dev, rdev->flags);
|
||||||
|
|
||||||
radeon_fbdev_setup(rdev);
|
radeon_fbdev_setup(rdev);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: if_vio.c,v 1.50 2024/08/27 19:11:20 sf Exp $ */
|
/* $OpenBSD: if_vio.c,v 1.51 2024/08/28 12:40:22 sf Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 Stefan Fritsch, Alexander Fiveg.
|
* Copyright (c) 2012 Stefan Fritsch, Alexander Fiveg.
|
||||||
|
@ -465,14 +465,14 @@ vio_alloc_mem(struct vio_softc *sc)
|
||||||
}
|
}
|
||||||
|
|
||||||
sc->sc_arrays = mallocarray(rxqsize + txqsize,
|
sc->sc_arrays = mallocarray(rxqsize + txqsize,
|
||||||
2 * sizeof(bus_dmamap_t) + sizeof(struct mbuf *), M_DEVBUF,
|
sizeof(bus_dmamap_t) + sizeof(struct mbuf *), M_DEVBUF,
|
||||||
M_WAITOK | M_CANFAIL | M_ZERO);
|
M_WAITOK | M_CANFAIL | M_ZERO);
|
||||||
if (sc->sc_arrays == NULL) {
|
if (sc->sc_arrays == NULL) {
|
||||||
printf("unable to allocate mem for dmamaps\n");
|
printf("unable to allocate mem for dmamaps\n");
|
||||||
goto err_hdr;
|
goto err_hdr;
|
||||||
}
|
}
|
||||||
allocsize = (rxqsize + txqsize) *
|
allocsize = (rxqsize + txqsize) *
|
||||||
(2 * sizeof(bus_dmamap_t) + sizeof(struct mbuf *));
|
(sizeof(bus_dmamap_t) + sizeof(struct mbuf *));
|
||||||
|
|
||||||
sc->sc_tx_dmamaps = sc->sc_arrays + rxqsize;
|
sc->sc_tx_dmamaps = sc->sc_arrays + rxqsize;
|
||||||
sc->sc_rx_mbufs = (void*) (sc->sc_tx_dmamaps + txqsize);
|
sc->sc_rx_mbufs = (void*) (sc->sc_tx_dmamaps + txqsize);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: kern_sysctl.c,v 1.445 2024/08/26 08:24:25 mvs Exp $ */
|
/* $OpenBSD: kern_sysctl.c,v 1.446 2024/08/29 10:44:40 bluhm Exp $ */
|
||||||
/* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */
|
/* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -530,7 +530,6 @@ kern_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
|
||||||
return (sysctl_rdstruct(oldp, oldlenp, newp, &bt, sizeof bt));
|
return (sysctl_rdstruct(oldp, oldlenp, newp, &bt, sizeof bt));
|
||||||
}
|
}
|
||||||
case KERN_MBSTAT: {
|
case KERN_MBSTAT: {
|
||||||
extern struct cpumem *mbstat;
|
|
||||||
uint64_t counters[MBSTAT_COUNT];
|
uint64_t counters[MBSTAT_COUNT];
|
||||||
struct mbstat mbs;
|
struct mbstat mbs;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -543,6 +542,12 @@ kern_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
|
||||||
mbs.m_drops = counters[MBSTAT_DROPS];
|
mbs.m_drops = counters[MBSTAT_DROPS];
|
||||||
mbs.m_wait = counters[MBSTAT_WAIT];
|
mbs.m_wait = counters[MBSTAT_WAIT];
|
||||||
mbs.m_drain = counters[MBSTAT_DRAIN];
|
mbs.m_drain = counters[MBSTAT_DRAIN];
|
||||||
|
mbs.m_defrag_alloc = counters[MBSTAT_DEFRAG_ALLOC];
|
||||||
|
mbs.m_prepend_alloc = counters[MBSTAT_PREPEND_ALLOC];
|
||||||
|
mbs.m_pullup_alloc = counters[MBSTAT_PULLUP_ALLOC];
|
||||||
|
mbs.m_pullup_copy = counters[MBSTAT_PULLUP_COPY];
|
||||||
|
mbs.m_pulldown_alloc = counters[MBSTAT_PULLDOWN_ALLOC];
|
||||||
|
mbs.m_pulldown_copy = counters[MBSTAT_PULLDOWN_COPY];
|
||||||
|
|
||||||
return (sysctl_rdstruct(oldp, oldlenp, newp,
|
return (sysctl_rdstruct(oldp, oldlenp, newp,
|
||||||
&mbs, sizeof(mbs)));
|
&mbs, sizeof(mbs)));
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: uipc_mbuf.c,v 1.290 2024/03/05 18:52:41 bluhm Exp $ */
|
/* $OpenBSD: uipc_mbuf.c,v 1.291 2024/08/29 10:44:40 bluhm Exp $ */
|
||||||
/* $NetBSD: uipc_mbuf.c,v 1.15.4.1 1996/06/13 17:11:44 cgd Exp $ */
|
/* $NetBSD: uipc_mbuf.c,v 1.15.4.1 1996/06/13 17:11:44 cgd Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -234,8 +234,6 @@ struct mbuf *
|
||||||
m_get(int nowait, int type)
|
m_get(int nowait, int type)
|
||||||
{
|
{
|
||||||
struct mbuf *m;
|
struct mbuf *m;
|
||||||
struct counters_ref cr;
|
|
||||||
uint64_t *counters;
|
|
||||||
int s;
|
int s;
|
||||||
|
|
||||||
KASSERT(type >= 0 && type < MT_NTYPES);
|
KASSERT(type >= 0 && type < MT_NTYPES);
|
||||||
|
@ -245,9 +243,7 @@ m_get(int nowait, int type)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
s = splnet();
|
s = splnet();
|
||||||
counters = counters_enter(&cr, mbstat);
|
counters_inc(mbstat, type);
|
||||||
counters[type]++;
|
|
||||||
counters_leave(&cr, mbstat);
|
|
||||||
splx(s);
|
splx(s);
|
||||||
|
|
||||||
m->m_type = type;
|
m->m_type = type;
|
||||||
|
@ -267,8 +263,6 @@ struct mbuf *
|
||||||
m_gethdr(int nowait, int type)
|
m_gethdr(int nowait, int type)
|
||||||
{
|
{
|
||||||
struct mbuf *m;
|
struct mbuf *m;
|
||||||
struct counters_ref cr;
|
|
||||||
uint64_t *counters;
|
|
||||||
int s;
|
int s;
|
||||||
|
|
||||||
KASSERT(type >= 0 && type < MT_NTYPES);
|
KASSERT(type >= 0 && type < MT_NTYPES);
|
||||||
|
@ -278,9 +272,7 @@ m_gethdr(int nowait, int type)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
s = splnet();
|
s = splnet();
|
||||||
counters = counters_enter(&cr, mbstat);
|
counters_inc(mbstat, type);
|
||||||
counters[type]++;
|
|
||||||
counters_leave(&cr, mbstat);
|
|
||||||
splx(s);
|
splx(s);
|
||||||
|
|
||||||
m->m_type = type;
|
m->m_type = type;
|
||||||
|
@ -417,17 +409,13 @@ struct mbuf *
|
||||||
m_free(struct mbuf *m)
|
m_free(struct mbuf *m)
|
||||||
{
|
{
|
||||||
struct mbuf *n;
|
struct mbuf *n;
|
||||||
struct counters_ref cr;
|
|
||||||
uint64_t *counters;
|
|
||||||
int s;
|
int s;
|
||||||
|
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
s = splnet();
|
s = splnet();
|
||||||
counters = counters_enter(&cr, mbstat);
|
counters_dec(mbstat, m->m_type);
|
||||||
counters[m->m_type]--;
|
|
||||||
counters_leave(&cr, mbstat);
|
|
||||||
splx(s);
|
splx(s);
|
||||||
|
|
||||||
n = m->m_next;
|
n = m->m_next;
|
||||||
|
@ -557,6 +545,7 @@ m_defrag(struct mbuf *m, int how)
|
||||||
|
|
||||||
KASSERT(m->m_flags & M_PKTHDR);
|
KASSERT(m->m_flags & M_PKTHDR);
|
||||||
|
|
||||||
|
counters_inc(mbstat, MBSTAT_DEFRAG_ALLOC);
|
||||||
if ((m0 = m_gethdr(how, m->m_type)) == NULL)
|
if ((m0 = m_gethdr(how, m->m_type)) == NULL)
|
||||||
return (ENOBUFS);
|
return (ENOBUFS);
|
||||||
if (m->m_pkthdr.len > MHLEN) {
|
if (m->m_pkthdr.len > MHLEN) {
|
||||||
|
@ -616,6 +605,7 @@ m_prepend(struct mbuf *m, int len, int how)
|
||||||
m->m_data -= len;
|
m->m_data -= len;
|
||||||
m->m_len += len;
|
m->m_len += len;
|
||||||
} else {
|
} else {
|
||||||
|
counters_inc(mbstat, MBSTAT_PREPEND_ALLOC);
|
||||||
MGET(mn, how, m->m_type);
|
MGET(mn, how, m->m_type);
|
||||||
if (mn == NULL) {
|
if (mn == NULL) {
|
||||||
m_freem(m);
|
m_freem(m);
|
||||||
|
@ -956,8 +946,8 @@ m_pullup(struct mbuf *m0, int len)
|
||||||
memmove(head, mtod(m0, caddr_t), m0->m_len);
|
memmove(head, mtod(m0, caddr_t), m0->m_len);
|
||||||
m0->m_data = head;
|
m0->m_data = head;
|
||||||
}
|
}
|
||||||
|
|
||||||
len -= m0->m_len;
|
len -= m0->m_len;
|
||||||
|
counters_inc(mbstat, MBSTAT_PULLUP_COPY);
|
||||||
} else {
|
} else {
|
||||||
/* the first mbuf is too small or read-only, make a new one */
|
/* the first mbuf is too small or read-only, make a new one */
|
||||||
space = adj + len;
|
space = adj + len;
|
||||||
|
@ -968,6 +958,7 @@ m_pullup(struct mbuf *m0, int len)
|
||||||
m0->m_next = m;
|
m0->m_next = m;
|
||||||
m = m0;
|
m = m0;
|
||||||
|
|
||||||
|
counters_inc(mbstat, MBSTAT_PULLUP_ALLOC);
|
||||||
MGET(m0, M_DONTWAIT, m->m_type);
|
MGET(m0, M_DONTWAIT, m->m_type);
|
||||||
if (m0 == NULL)
|
if (m0 == NULL)
|
||||||
goto bad;
|
goto bad;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: uipc_mbuf2.c,v 1.45 2020/12/12 11:48:54 jan Exp $ */
|
/* $OpenBSD: uipc_mbuf2.c,v 1.47 2024/08/29 16:42:30 bluhm Exp $ */
|
||||||
/* $KAME: uipc_mbuf2.c,v 1.29 2001/02/14 13:42:10 itojun Exp $ */
|
/* $KAME: uipc_mbuf2.c,v 1.29 2001/02/14 13:42:10 itojun Exp $ */
|
||||||
/* $NetBSD: uipc_mbuf.c,v 1.40 1999/04/01 00:23:25 thorpej Exp $ */
|
/* $NetBSD: uipc_mbuf.c,v 1.40 1999/04/01 00:23:25 thorpej Exp $ */
|
||||||
|
|
||||||
|
@ -66,6 +66,7 @@
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
#include <sys/malloc.h>
|
#include <sys/malloc.h>
|
||||||
#include <sys/pool.h>
|
#include <sys/pool.h>
|
||||||
|
#include <sys/percpu.h>
|
||||||
#include <sys/mbuf.h>
|
#include <sys/mbuf.h>
|
||||||
|
|
||||||
extern struct pool mtagpool;
|
extern struct pool mtagpool;
|
||||||
|
@ -117,6 +118,7 @@ m_pulldown(struct mbuf *m, int off, int len, int *offp)
|
||||||
if (len <= n->m_len - off) {
|
if (len <= n->m_len - off) {
|
||||||
struct mbuf *mlast;
|
struct mbuf *mlast;
|
||||||
|
|
||||||
|
counters_inc(mbstat, MBSTAT_PULLDOWN_ALLOC);
|
||||||
o = m_dup1(n, off, n->m_len - off, M_DONTWAIT);
|
o = m_dup1(n, off, n->m_len - off, M_DONTWAIT);
|
||||||
if (o == NULL) {
|
if (o == NULL) {
|
||||||
m_freem(m);
|
m_freem(m);
|
||||||
|
@ -158,6 +160,7 @@ m_pulldown(struct mbuf *m, int off, int len, int *offp)
|
||||||
*/
|
*/
|
||||||
if ((off == 0 || offp) && m_trailingspace(n) >= tlen &&
|
if ((off == 0 || offp) && m_trailingspace(n) >= tlen &&
|
||||||
!sharedcluster) {
|
!sharedcluster) {
|
||||||
|
counters_inc(mbstat, MBSTAT_PULLDOWN_COPY);
|
||||||
m_copydata(n->m_next, 0, tlen, mtod(n, caddr_t) + n->m_len);
|
m_copydata(n->m_next, 0, tlen, mtod(n, caddr_t) + n->m_len);
|
||||||
n->m_len += tlen;
|
n->m_len += tlen;
|
||||||
m_adj(n->m_next, tlen);
|
m_adj(n->m_next, tlen);
|
||||||
|
@ -167,7 +170,8 @@ m_pulldown(struct mbuf *m, int off, int len, int *offp)
|
||||||
!sharedcluster && n->m_next->m_len >= tlen) {
|
!sharedcluster && n->m_next->m_len >= tlen) {
|
||||||
n->m_next->m_data -= hlen;
|
n->m_next->m_data -= hlen;
|
||||||
n->m_next->m_len += hlen;
|
n->m_next->m_len += hlen;
|
||||||
memmove(mtod(n->m_next, caddr_t), mtod(n, caddr_t) + off, hlen);
|
counters_inc(mbstat, MBSTAT_PULLDOWN_COPY);
|
||||||
|
memcpy(mtod(n->m_next, caddr_t), mtod(n, caddr_t) + off, hlen);
|
||||||
n->m_len -= hlen;
|
n->m_len -= hlen;
|
||||||
n = n->m_next;
|
n = n->m_next;
|
||||||
off = 0;
|
off = 0;
|
||||||
|
@ -182,6 +186,7 @@ m_pulldown(struct mbuf *m, int off, int len, int *offp)
|
||||||
m_freem(m);
|
m_freem(m);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
counters_inc(mbstat, MBSTAT_PULLDOWN_ALLOC);
|
||||||
MGET(o, M_DONTWAIT, m->m_type);
|
MGET(o, M_DONTWAIT, m->m_type);
|
||||||
if (o && len > MLEN) {
|
if (o && len > MLEN) {
|
||||||
MCLGETL(o, M_DONTWAIT, len);
|
MCLGETL(o, M_DONTWAIT, len);
|
||||||
|
@ -196,7 +201,7 @@ m_pulldown(struct mbuf *m, int off, int len, int *offp)
|
||||||
}
|
}
|
||||||
/* get hlen from <n, off> into <o, 0> */
|
/* get hlen from <n, off> into <o, 0> */
|
||||||
o->m_len = hlen;
|
o->m_len = hlen;
|
||||||
memmove(mtod(o, caddr_t), mtod(n, caddr_t) + off, hlen);
|
memcpy(mtod(o, caddr_t), mtod(n, caddr_t) + off, hlen);
|
||||||
n->m_len -= hlen;
|
n->m_len -= hlen;
|
||||||
/* get tlen from <n->m_next, 0> into <o, hlen> */
|
/* get tlen from <n->m_next, 0> into <o, hlen> */
|
||||||
m_copydata(n->m_next, 0, tlen, mtod(o, caddr_t) + o->m_len);
|
m_copydata(n->m_next, 0, tlen, mtod(o, caddr_t) + o->m_len);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: mbuf.h,v 1.263 2024/04/14 20:46:27 bluhm Exp $ */
|
/* $OpenBSD: mbuf.h,v 1.264 2024/08/29 10:44:40 bluhm Exp $ */
|
||||||
/* $NetBSD: mbuf.h,v 1.19 1996/02/09 18:25:14 christos Exp $ */
|
/* $NetBSD: mbuf.h,v 1.19 1996/02/09 18:25:14 christos Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -363,11 +363,17 @@ u_int mextfree_register(void (*)(caddr_t, u_int, void *));
|
||||||
/* length to m_copy to copy all */
|
/* length to m_copy to copy all */
|
||||||
#define M_COPYALL 1000000000
|
#define M_COPYALL 1000000000
|
||||||
|
|
||||||
#define MBSTAT_TYPES MT_NTYPES
|
#define MBSTAT_TYPES MT_NTYPES
|
||||||
#define MBSTAT_DROPS (MBSTAT_TYPES + 0)
|
#define MBSTAT_DROPS (MBSTAT_TYPES + 0)
|
||||||
#define MBSTAT_WAIT (MBSTAT_TYPES + 1)
|
#define MBSTAT_WAIT (MBSTAT_TYPES + 1)
|
||||||
#define MBSTAT_DRAIN (MBSTAT_TYPES + 2)
|
#define MBSTAT_DRAIN (MBSTAT_TYPES + 2)
|
||||||
#define MBSTAT_COUNT (MBSTAT_TYPES + 3)
|
#define MBSTAT_DEFRAG_ALLOC (MBSTAT_TYPES + 3)
|
||||||
|
#define MBSTAT_PREPEND_ALLOC (MBSTAT_TYPES + 4)
|
||||||
|
#define MBSTAT_PULLUP_ALLOC (MBSTAT_TYPES + 5)
|
||||||
|
#define MBSTAT_PULLUP_COPY (MBSTAT_TYPES + 6)
|
||||||
|
#define MBSTAT_PULLDOWN_ALLOC (MBSTAT_TYPES + 7)
|
||||||
|
#define MBSTAT_PULLDOWN_COPY (MBSTAT_TYPES + 8)
|
||||||
|
#define MBSTAT_COUNT (MBSTAT_TYPES + 9)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mbuf statistics.
|
* Mbuf statistics.
|
||||||
|
@ -378,8 +384,14 @@ struct mbstat {
|
||||||
u_long m_drops; /* times failed to find space */
|
u_long m_drops; /* times failed to find space */
|
||||||
u_long m_wait; /* times waited for space */
|
u_long m_wait; /* times waited for space */
|
||||||
u_long m_drain; /* times drained protocols for space */
|
u_long m_drain; /* times drained protocols for space */
|
||||||
u_long m_mtypes[MBSTAT_COUNT];
|
u_long m_mtypes[MBSTAT_TYPES];
|
||||||
/* type specific mbuf allocations */
|
/* type specific mbuf allocations */
|
||||||
|
u_long m_defrag_alloc;
|
||||||
|
u_long m_prepend_alloc;
|
||||||
|
u_long m_pullup_alloc;
|
||||||
|
u_long m_pullup_copy;
|
||||||
|
u_long m_pulldown_alloc;
|
||||||
|
u_long m_pulldown_copy;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include <sys/mutex.h>
|
#include <sys/mutex.h>
|
||||||
|
@ -404,6 +416,7 @@ extern long nmbclust; /* limit on the # of clusters */
|
||||||
extern int max_linkhdr; /* largest link-level header */
|
extern int max_linkhdr; /* largest link-level header */
|
||||||
extern int max_protohdr; /* largest protocol header */
|
extern int max_protohdr; /* largest protocol header */
|
||||||
extern int max_hdr; /* largest link+protocol header */
|
extern int max_hdr; /* largest link+protocol header */
|
||||||
|
extern struct cpumem *mbstat; /* mbuf statistics counter */
|
||||||
|
|
||||||
void mbinit(void);
|
void mbinit(void);
|
||||||
void mbcpuinit(void);
|
void mbcpuinit(void);
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: dighost.c,v 1.38 2024/04/23 13:34:50 jsg Exp $ */
|
/* $Id: dighost.c,v 1.39 2024/08/29 07:20:16 florian Exp $ */
|
||||||
|
|
||||||
/*! \file
|
/*! \file
|
||||||
* \note
|
* \note
|
||||||
|
@ -116,8 +116,8 @@ static const struct {
|
||||||
} root_hints[] = {
|
} root_hints[] = {
|
||||||
{ "198.41.0.4", AF_INET }, /* a.root-servers.net */
|
{ "198.41.0.4", AF_INET }, /* a.root-servers.net */
|
||||||
{ "2001:503:ba3e::2:30", AF_INET6 }, /* a.root-servers.net */
|
{ "2001:503:ba3e::2:30", AF_INET6 }, /* a.root-servers.net */
|
||||||
{ "199.9.14.201", AF_INET }, /* b.root-servers.net */
|
{ "170.247.170.2", AF_INET }, /* b.root-servers.net */
|
||||||
{ "2001:500:200::b", AF_INET6 }, /* b.root-servers.net */
|
{ "2801:1b8:10::b", AF_INET6 }, /* b.root-servers.net */
|
||||||
{ "192.33.4.12", AF_INET }, /* c.root-servers.net */
|
{ "192.33.4.12", AF_INET }, /* c.root-servers.net */
|
||||||
{ "2001:500:2::c", AF_INET6 }, /* c.root-servers.net */
|
{ "2001:500:2::c", AF_INET6 }, /* c.root-servers.net */
|
||||||
{ "199.7.91.13", AF_INET }, /* d.root-servers.net */
|
{ "199.7.91.13", AF_INET }, /* d.root-servers.net */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: mbuf.c,v 1.45 2023/07/16 03:01:31 yasuoka Exp $ */
|
/* $OpenBSD: mbuf.c,v 1.46 2024/08/29 10:44:40 bluhm Exp $ */
|
||||||
/* $NetBSD: mbuf.c,v 1.9 1996/05/07 02:55:03 thorpej Exp $ */
|
/* $NetBSD: mbuf.c,v 1.9 1996/05/07 02:55:03 thorpej Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -79,7 +79,7 @@ static struct mbtypes {
|
||||||
};
|
};
|
||||||
|
|
||||||
int nmbtypes = sizeof(mbstat.m_mtypes) / sizeof(u_long);
|
int nmbtypes = sizeof(mbstat.m_mtypes) / sizeof(u_long);
|
||||||
bool seen[MBSTAT_COUNT]; /* "have we seen this type yet?" */
|
bool seen[MBSTAT_TYPES]; /* "have we seen this type yet?" */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Print mbuf statistics.
|
* Print mbuf statistics.
|
||||||
|
@ -93,7 +93,7 @@ mbpr(void)
|
||||||
struct mbtypes *mp;
|
struct mbtypes *mp;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
if (nmbtypes != MBSTAT_COUNT) {
|
if (nmbtypes != MBSTAT_TYPES) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: unexpected change to mbstat; check source\n",
|
"%s: unexpected change to mbstat; check source\n",
|
||||||
__progname);
|
__progname);
|
||||||
|
@ -205,4 +205,10 @@ mbpr(void)
|
||||||
printf("%lu requests for memory denied\n", mbstat.m_drops);
|
printf("%lu requests for memory denied\n", mbstat.m_drops);
|
||||||
printf("%lu requests for memory delayed\n", mbstat.m_wait);
|
printf("%lu requests for memory delayed\n", mbstat.m_wait);
|
||||||
printf("%lu calls to protocol drain routines\n", mbstat.m_drain);
|
printf("%lu calls to protocol drain routines\n", mbstat.m_drain);
|
||||||
|
printf("%lu defrag mbuf allocation\n", mbstat.m_defrag_alloc);
|
||||||
|
printf("%lu prepend mbuf allocation\n", mbstat.m_prepend_alloc);
|
||||||
|
printf("%lu pullup mbuf allocation\n", mbstat.m_pullup_alloc);
|
||||||
|
printf("%lu pullup memory copy\n", mbstat.m_pullup_copy);
|
||||||
|
printf("%lu pulldown mbuf allocation\n", mbstat.m_pulldown_alloc);
|
||||||
|
printf("%lu pulldown memory copy\n", mbstat.m_pulldown_copy);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: apps.c,v 1.68 2024/08/18 20:24:11 tb Exp $ */
|
/* $OpenBSD: apps.c,v 1.69 2024/08/29 17:01:02 tb Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
|
* Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
|
||||||
*
|
*
|
||||||
|
@ -2156,31 +2156,3 @@ show_cipher(const OBJ_NAME *name, void *arg)
|
||||||
|
|
||||||
fprintf(stderr, " -%-24s%s", name->name, (++*n % 3 != 0 ? "" : "\n"));
|
fprintf(stderr, " -%-24s%s", name->name, (++*n % 3 != 0 ? "" : "\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
pkey_check(BIO *out, EVP_PKEY *pkey, int (check_fn)(EVP_PKEY_CTX *),
|
|
||||||
const char *desc)
|
|
||||||
{
|
|
||||||
EVP_PKEY_CTX *ctx;
|
|
||||||
|
|
||||||
if ((ctx = EVP_PKEY_CTX_new(pkey, NULL)) == NULL) {
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (check_fn(ctx) == 1) {
|
|
||||||
BIO_printf(out, "%s valid\n", desc);
|
|
||||||
} else {
|
|
||||||
unsigned long err;
|
|
||||||
|
|
||||||
BIO_printf(out, "%s invalid\n", desc);
|
|
||||||
|
|
||||||
while ((err = ERR_get_error()) != 0)
|
|
||||||
BIO_printf(out, "Detailed error: %s\n",
|
|
||||||
ERR_reason_error_string(err));
|
|
||||||
}
|
|
||||||
|
|
||||||
EVP_PKEY_CTX_free(ctx);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: apps.h,v 1.37 2024/05/21 05:00:48 jsg Exp $ */
|
/* $OpenBSD: apps.h,v 1.38 2024/08/29 17:01:02 tb Exp $ */
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -315,7 +315,4 @@ int options_parse(int argc, char **argv, const struct option *opts,
|
||||||
char **unnamed, int *argsused);
|
char **unnamed, int *argsused);
|
||||||
|
|
||||||
void show_cipher(const OBJ_NAME *name, void *arg);
|
void show_cipher(const OBJ_NAME *name, void *arg);
|
||||||
|
|
||||||
int pkey_check(BIO *out, EVP_PKEY *pkey, int (check_fn)(EVP_PKEY_CTX *),
|
|
||||||
const char *desc);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: ocsp.c,v 1.23 2023/03/06 14:32:06 tb Exp $ */
|
/* $OpenBSD: ocsp.c,v 1.24 2024/08/29 11:04:02 tb Exp $ */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 2000.
|
* project 2000.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.\" $OpenBSD: openssl.1,v 1.159 2024/08/22 12:15:07 tb Exp $
|
.\" $OpenBSD: openssl.1,v 1.160 2024/08/29 17:01:40 tb Exp $
|
||||||
.\" ====================================================================
|
.\" ====================================================================
|
||||||
.\" Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
.\" Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
||||||
.\"
|
.\"
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
.\" copied and put under another distribution licence
|
.\" copied and put under another distribution licence
|
||||||
.\" [including the GNU Public Licence.]
|
.\" [including the GNU Public Licence.]
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: August 22 2024 $
|
.Dd $Mdocdate: August 29 2024 $
|
||||||
.Dt OPENSSL 1
|
.Dt OPENSSL 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -3282,7 +3282,6 @@ is equivalent to
|
||||||
.Bl -hang -width "openssl pkey"
|
.Bl -hang -width "openssl pkey"
|
||||||
.It Nm openssl pkey
|
.It Nm openssl pkey
|
||||||
.Bk -words
|
.Bk -words
|
||||||
.Op Fl check
|
|
||||||
.Op Ar cipher
|
.Op Ar cipher
|
||||||
.Op Fl in Ar file
|
.Op Fl in Ar file
|
||||||
.Op Fl inform Cm der | pem
|
.Op Fl inform Cm der | pem
|
||||||
|
@ -3291,7 +3290,6 @@ is equivalent to
|
||||||
.Op Fl outform Cm der | pem
|
.Op Fl outform Cm der | pem
|
||||||
.Op Fl passin Ar arg
|
.Op Fl passin Ar arg
|
||||||
.Op Fl passout Ar arg
|
.Op Fl passout Ar arg
|
||||||
.Op Fl pubcheck
|
|
||||||
.Op Fl pubin
|
.Op Fl pubin
|
||||||
.Op Fl pubout
|
.Op Fl pubout
|
||||||
.Op Fl text
|
.Op Fl text
|
||||||
|
@ -3307,8 +3305,6 @@ and their components printed out.
|
||||||
.Pp
|
.Pp
|
||||||
The options are as follows:
|
The options are as follows:
|
||||||
.Bl -tag -width Ds
|
.Bl -tag -width Ds
|
||||||
.It Fl check
|
|
||||||
Check the validity of a key pair.
|
|
||||||
.It Ar cipher
|
.It Ar cipher
|
||||||
Encrypt the private key with the specified cipher.
|
Encrypt the private key with the specified cipher.
|
||||||
Any algorithm name accepted by
|
Any algorithm name accepted by
|
||||||
|
@ -3334,8 +3330,6 @@ The output format.
|
||||||
The key password source.
|
The key password source.
|
||||||
.It Fl passout Ar arg
|
.It Fl passout Ar arg
|
||||||
The output file password source.
|
The output file password source.
|
||||||
.It Fl pubcheck
|
|
||||||
Check the validity of a public key
|
|
||||||
or the public component of a key pair.
|
or the public component of a key pair.
|
||||||
.It Fl pubin
|
.It Fl pubin
|
||||||
Read in a public key, not a private key.
|
Read in a public key, not a private key.
|
||||||
|
@ -3351,7 +3345,6 @@ even if a private key is being processed.
|
||||||
.Tg pkeyparam
|
.Tg pkeyparam
|
||||||
.Sh PKEYPARAM
|
.Sh PKEYPARAM
|
||||||
.Cm openssl pkeyparam
|
.Cm openssl pkeyparam
|
||||||
.Op Fl check
|
|
||||||
.Op Fl in Ar file
|
.Op Fl in Ar file
|
||||||
.Op Fl noout
|
.Op Fl noout
|
||||||
.Op Fl out Ar file
|
.Op Fl out Ar file
|
||||||
|
@ -3364,8 +3357,6 @@ The key type is determined by the PEM headers.
|
||||||
.Pp
|
.Pp
|
||||||
The options are as follows:
|
The options are as follows:
|
||||||
.Bl -tag -width Ds
|
.Bl -tag -width Ds
|
||||||
.It Fl check
|
|
||||||
check the correctness of parameters.
|
|
||||||
.It Fl in Ar file
|
.It Fl in Ar file
|
||||||
The input file to read from,
|
The input file to read from,
|
||||||
or standard input if not specified.
|
or standard input if not specified.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: pkey.c,v 1.20 2023/07/23 11:39:29 tb Exp $ */
|
/* $OpenBSD: pkey.c,v 1.21 2024/08/29 17:01:02 tb Exp $ */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 2006
|
* project 2006
|
||||||
*/
|
*/
|
||||||
|
@ -66,7 +66,6 @@
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
int check;
|
|
||||||
const EVP_CIPHER *cipher;
|
const EVP_CIPHER *cipher;
|
||||||
char *infile;
|
char *infile;
|
||||||
int informat;
|
int informat;
|
||||||
|
@ -75,7 +74,6 @@ static struct {
|
||||||
int outformat;
|
int outformat;
|
||||||
char *passargin;
|
char *passargin;
|
||||||
char *passargout;
|
char *passargout;
|
||||||
int pubcheck;
|
|
||||||
int pubin;
|
int pubin;
|
||||||
int pubout;
|
int pubout;
|
||||||
int pubtext;
|
int pubtext;
|
||||||
|
@ -100,12 +98,6 @@ pkey_opt_cipher(int argc, char **argv, int *argsused)
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct option pkey_options[] = {
|
static const struct option pkey_options[] = {
|
||||||
{
|
|
||||||
.name = "check",
|
|
||||||
.desc = "Check validity of key",
|
|
||||||
.type = OPTION_FLAG,
|
|
||||||
.opt.flag = &cfg.check,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
.name = "in",
|
.name = "in",
|
||||||
.argname = "file",
|
.argname = "file",
|
||||||
|
@ -154,12 +146,6 @@ static const struct option pkey_options[] = {
|
||||||
.type = OPTION_ARG,
|
.type = OPTION_ARG,
|
||||||
.opt.arg = &cfg.passargout,
|
.opt.arg = &cfg.passargout,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
.name = "pubcheck",
|
|
||||||
.desc = "Check validity of public key",
|
|
||||||
.type = OPTION_FLAG,
|
|
||||||
.opt.flag = &cfg.pubcheck,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
.name = "pubin",
|
.name = "pubin",
|
||||||
.desc = "Expect a public key (default private key)",
|
.desc = "Expect a public key (default private key)",
|
||||||
|
@ -200,9 +186,9 @@ pkey_usage(void)
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"usage: pkey [-check] [-ciphername] [-in file] [-inform fmt] "
|
"usage: pkey [-ciphername] [-in file] [-inform fmt] "
|
||||||
"[-noout] [-out file]\n"
|
"[-noout] [-out file]\n"
|
||||||
" [-outform fmt] [-passin src] [-passout src] [-pubcheck] "
|
" [-outform fmt] [-passin src] [-passout src] "
|
||||||
"[-pubin] [-pubout]\n"
|
"[-pubin] [-pubout]\n"
|
||||||
" [-text] [-text_pub]\n\n");
|
" [-text] [-text_pub]\n\n");
|
||||||
options_usage(pkey_options);
|
options_usage(pkey_options);
|
||||||
|
@ -264,14 +250,6 @@ pkey_main(int argc, char **argv)
|
||||||
if (!pkey)
|
if (!pkey)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
if (cfg.check) {
|
|
||||||
if (!pkey_check(out, pkey, EVP_PKEY_check, "Key pair"))
|
|
||||||
goto end;
|
|
||||||
} else if (cfg.pubcheck) {
|
|
||||||
if (!pkey_check(out, pkey, EVP_PKEY_public_check, "Public key"))
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cfg.noout) {
|
if (!cfg.noout) {
|
||||||
if (cfg.outformat == FORMAT_PEM) {
|
if (cfg.outformat == FORMAT_PEM) {
|
||||||
if (cfg.pubout)
|
if (cfg.pubout)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: pkeyparam.c,v 1.18 2023/07/23 11:39:29 tb Exp $ */
|
/* $OpenBSD: pkeyparam.c,v 1.19 2024/08/29 17:01:02 tb Exp $ */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
||||||
* project 2006
|
* project 2006
|
||||||
*/
|
*/
|
||||||
|
@ -66,7 +66,6 @@
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
int check;
|
|
||||||
char *infile;
|
char *infile;
|
||||||
int noout;
|
int noout;
|
||||||
char *outfile;
|
char *outfile;
|
||||||
|
@ -74,12 +73,6 @@ static struct {
|
||||||
} cfg;
|
} cfg;
|
||||||
|
|
||||||
static const struct option pkeyparam_options[] = {
|
static const struct option pkeyparam_options[] = {
|
||||||
{
|
|
||||||
.name = "check",
|
|
||||||
.desc = "Check validity of key parameters",
|
|
||||||
.type = OPTION_FLAG,
|
|
||||||
.opt.flag = &cfg.check,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
.name = "in",
|
.name = "in",
|
||||||
.argname = "file",
|
.argname = "file",
|
||||||
|
@ -113,8 +106,7 @@ static void
|
||||||
pkeyparam_usage(void)
|
pkeyparam_usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"usage: pkeyparam [-check] [-in file] [-noout] [-out file] "
|
"usage: pkeyparam [-in file] [-noout] [-out file] [-text]\n");
|
||||||
"[-text]\n");
|
|
||||||
options_usage(pkeyparam_options);
|
options_usage(pkeyparam_options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,11 +155,6 @@ pkeyparam_main(int argc, char **argv)
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cfg.check) {
|
|
||||||
if (!pkey_check(out, pkey, EVP_PKEY_param_check, "Parameters"))
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cfg.noout)
|
if (!cfg.noout)
|
||||||
PEM_write_bio_Parameters(out, pkey);
|
PEM_write_bio_Parameters(out, pkey);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: process.c,v 1.37 2024/07/17 20:57:16 millert Exp $ */
|
/* $OpenBSD: process.c,v 1.38 2024/08/28 14:30:26 millert Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1992 Diomidis Spinellis.
|
* Copyright (c) 1992 Diomidis Spinellis.
|
||||||
|
@ -387,14 +387,12 @@ substitute(struct s_command *cp)
|
||||||
* and at the end of the line, terminate.
|
* and at the end of the line, terminate.
|
||||||
*/
|
*/
|
||||||
if (match[0].rm_so == match[0].rm_eo) {
|
if (match[0].rm_so == match[0].rm_eo) {
|
||||||
if (*s == '\0' || *s == '\n')
|
if (slen > 0) {
|
||||||
slen = -1;
|
|
||||||
else
|
|
||||||
slen--;
|
|
||||||
if (*s != '\0') {
|
|
||||||
cspace(&SS, s++, 1, APPEND);
|
cspace(&SS, s++, 1, APPEND);
|
||||||
|
slen--;
|
||||||
le++;
|
le++;
|
||||||
}
|
} else
|
||||||
|
slen = -1;
|
||||||
lastempty = 1;
|
lastempty = 1;
|
||||||
} else
|
} else
|
||||||
lastempty = 0;
|
lastempty = 0;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: rde.c,v 1.627 2024/08/20 11:59:39 claudio Exp $ */
|
/* $OpenBSD: rde.c,v 1.629 2024/08/28 13:21:39 claudio Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
|
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
|
||||||
|
@ -398,7 +398,8 @@ rde_dispatch_imsg_session(struct imsgbuf *imsgbuf)
|
||||||
peerid);
|
peerid);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
peer_imsg_push(peer, &imsg);
|
if (peer_is_up(peer))
|
||||||
|
peer_imsg_push(peer, &imsg);
|
||||||
break;
|
break;
|
||||||
case IMSG_SESSION_ADD:
|
case IMSG_SESSION_ADD:
|
||||||
if (imsg_get_data(&imsg, &pconf, sizeof(pconf)) == -1)
|
if (imsg_get_data(&imsg, &pconf, sizeof(pconf)) == -1)
|
||||||
|
@ -1311,13 +1312,16 @@ rde_dispatch_imsg_peer(struct rde_peer *peer, void *bula)
|
||||||
struct imsg imsg;
|
struct imsg imsg;
|
||||||
struct ibuf ibuf;
|
struct ibuf ibuf;
|
||||||
|
|
||||||
|
if (!peer_is_up(peer)) {
|
||||||
|
peer_imsg_flush(peer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!peer_imsg_pop(peer, &imsg))
|
if (!peer_imsg_pop(peer, &imsg))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (imsg_get_type(&imsg)) {
|
switch (imsg_get_type(&imsg)) {
|
||||||
case IMSG_UPDATE:
|
case IMSG_UPDATE:
|
||||||
if (peer->state != PEER_UP)
|
|
||||||
break;
|
|
||||||
if (imsg_get_ibuf(&imsg, &ibuf) == -1)
|
if (imsg_get_ibuf(&imsg, &ibuf) == -1)
|
||||||
log_warn("update: bad imsg");
|
log_warn("update: bad imsg");
|
||||||
else
|
else
|
||||||
|
@ -3332,7 +3336,7 @@ rde_update_queue_pending(void)
|
||||||
RB_FOREACH(peer, peer_tree, &peertable) {
|
RB_FOREACH(peer, peer_tree, &peertable) {
|
||||||
if (peer->conf.id == 0)
|
if (peer->conf.id == 0)
|
||||||
continue;
|
continue;
|
||||||
if (peer->state != PEER_UP)
|
if (!peer_is_up(peer))
|
||||||
continue;
|
continue;
|
||||||
if (peer->throttled)
|
if (peer->throttled)
|
||||||
continue;
|
continue;
|
||||||
|
@ -3358,7 +3362,7 @@ rde_update_queue_runner(uint8_t aid)
|
||||||
RB_FOREACH(peer, peer_tree, &peertable) {
|
RB_FOREACH(peer, peer_tree, &peertable) {
|
||||||
if (peer->conf.id == 0)
|
if (peer->conf.id == 0)
|
||||||
continue;
|
continue;
|
||||||
if (peer->state != PEER_UP)
|
if (!peer_is_up(peer))
|
||||||
continue;
|
continue;
|
||||||
if (peer->throttled)
|
if (peer->throttled)
|
||||||
continue;
|
continue;
|
||||||
|
@ -3387,7 +3391,7 @@ rde_update_queue_runner(uint8_t aid)
|
||||||
RB_FOREACH(peer, peer_tree, &peertable) {
|
RB_FOREACH(peer, peer_tree, &peertable) {
|
||||||
if (peer->conf.id == 0)
|
if (peer->conf.id == 0)
|
||||||
continue;
|
continue;
|
||||||
if (peer->state != PEER_UP)
|
if (!peer_is_up(peer))
|
||||||
continue;
|
continue;
|
||||||
if (peer->throttled)
|
if (peer->throttled)
|
||||||
continue;
|
continue;
|
||||||
|
@ -3627,6 +3631,27 @@ rde_reload_done(void)
|
||||||
continue;
|
continue;
|
||||||
peer->reconf_out = 0;
|
peer->reconf_out = 0;
|
||||||
peer->reconf_rib = 0;
|
peer->reconf_rib = 0;
|
||||||
|
|
||||||
|
/* max prefix checker */
|
||||||
|
if (peer->conf.max_prefix &&
|
||||||
|
peer->stats.prefix_cnt > peer->conf.max_prefix) {
|
||||||
|
log_peer_warnx(&peer->conf,
|
||||||
|
"prefix limit reached (>%u/%u)",
|
||||||
|
peer->stats.prefix_cnt, peer->conf.max_prefix);
|
||||||
|
rde_update_err(peer, ERR_CEASE, ERR_CEASE_MAX_PREFIX,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
/* max prefix checker outbound */
|
||||||
|
if (peer->conf.max_out_prefix &&
|
||||||
|
peer->stats.prefix_out_cnt > peer->conf.max_out_prefix) {
|
||||||
|
log_peer_warnx(&peer->conf,
|
||||||
|
"outbound prefix limit reached (>%u/%u)",
|
||||||
|
peer->stats.prefix_out_cnt,
|
||||||
|
peer->conf.max_out_prefix);
|
||||||
|
rde_update_err(peer, ERR_CEASE,
|
||||||
|
ERR_CEASE_MAX_SENT_PREFIX, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if (peer->export_type != peer->conf.export_type) {
|
if (peer->export_type != peer->conf.export_type) {
|
||||||
log_peer_info(&peer->conf, "export type change, "
|
log_peer_info(&peer->conf, "export type change, "
|
||||||
"reloading");
|
"reloading");
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: rde.h,v 1.304 2024/08/14 19:09:51 claudio Exp $ */
|
/* $OpenBSD: rde.h,v 1.305 2024/08/28 13:21:39 claudio Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org> and
|
* Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org> and
|
||||||
|
@ -379,6 +379,12 @@ int peer_imsg_pop(struct rde_peer *, struct imsg *);
|
||||||
int peer_imsg_pending(void);
|
int peer_imsg_pending(void);
|
||||||
void peer_imsg_flush(struct rde_peer *);
|
void peer_imsg_flush(struct rde_peer *);
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
peer_is_up(struct rde_peer *peer)
|
||||||
|
{
|
||||||
|
return (peer->state == PEER_UP);
|
||||||
|
}
|
||||||
|
|
||||||
RB_PROTOTYPE(peer_tree, rde_peer, entry, peer_cmp);
|
RB_PROTOTYPE(peer_tree, rde_peer, entry, peer_cmp);
|
||||||
|
|
||||||
/* rde_attr.c */
|
/* rde_attr.c */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: rde_peer.c,v 1.37 2024/05/22 08:41:14 claudio Exp $ */
|
/* $OpenBSD: rde_peer.c,v 1.38 2024/08/28 13:21:39 claudio Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2019 Claudio Jeker <claudio@openbsd.org>
|
* Copyright (c) 2019 Claudio Jeker <claudio@openbsd.org>
|
||||||
|
@ -234,7 +234,7 @@ peer_generate_update(struct rde_peer *peer, struct rib_entry *re,
|
||||||
/* skip ourself */
|
/* skip ourself */
|
||||||
if (peer == peerself)
|
if (peer == peerself)
|
||||||
return;
|
return;
|
||||||
if (peer->state != PEER_UP)
|
if (!peer_is_up(peer))
|
||||||
return;
|
return;
|
||||||
/* skip peers using a different rib */
|
/* skip peers using a different rib */
|
||||||
if (peer->loc_rib_id != re->rib_id)
|
if (peer->loc_rib_id != re->rib_id)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: procmap.c,v 1.72 2024/03/29 06:54:13 deraadt Exp $ */
|
/* $OpenBSD: procmap.c,v 1.73 2024/08/28 14:22:36 naddy Exp $ */
|
||||||
/* $NetBSD: pmap.c,v 1.1 2002/09/01 20:32:44 atatat Exp $ */
|
/* $NetBSD: pmap.c,v 1.1 2002/09/01 20:32:44 atatat Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -483,11 +483,11 @@ process_map(kvm_t *kd, pid_t pid, struct kinfo_proc *proc, struct sum *sum)
|
||||||
/* headers */
|
/* headers */
|
||||||
#ifdef DISABLED_HEADERS
|
#ifdef DISABLED_HEADERS
|
||||||
if (print_map)
|
if (print_map)
|
||||||
printf("%-*s %-*s rwxSe RWX CPY NCP I W A\n",
|
printf("%-*s %-*s rwxS RWX CPY NCP I W A\n",
|
||||||
(int)sizeof(long) * 2 + 2, "Start",
|
(int)sizeof(long) * 2 + 2, "Start",
|
||||||
(int)sizeof(long) * 2 + 2, "End");
|
(int)sizeof(long) * 2 + 2, "End");
|
||||||
if (print_maps)
|
if (print_maps)
|
||||||
printf("%-*s %-*s rwxSep %-*s Dev Inode File\n",
|
printf("%-*s %-*s rwxSp %-*s Dev Inode File\n",
|
||||||
(int)sizeof(long) * 2 + 0, "Start",
|
(int)sizeof(long) * 2 + 0, "Start",
|
||||||
(int)sizeof(long) * 2 + 0, "End",
|
(int)sizeof(long) * 2 + 0, "End",
|
||||||
(int)sizeof(long) * 2 + 0, "Offset");
|
(int)sizeof(long) * 2 + 0, "Offset");
|
||||||
|
@ -497,7 +497,7 @@ process_map(kvm_t *kd, pid_t pid, struct kinfo_proc *proc, struct sum *sum)
|
||||||
(int)sizeof(int) * 2 - 1, "Size ");
|
(int)sizeof(int) * 2 - 1, "Size ");
|
||||||
#endif
|
#endif
|
||||||
if (print_all)
|
if (print_all)
|
||||||
printf("%-*s %-*s %*s %-*s rwxSeIpc RWX I/W/A Dev %*s - File\n",
|
printf("%-*s %-*s %*s %-*s rwxSIpc RWX I/W/A Dev %*s - File\n",
|
||||||
(int)sizeof(long) * 2, "Start",
|
(int)sizeof(long) * 2, "Start",
|
||||||
(int)sizeof(long) * 2, "End",
|
(int)sizeof(long) * 2, "End",
|
||||||
(int)sizeof(int) * 2, "Size ",
|
(int)sizeof(int) * 2, "Size ",
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: extern.h,v 1.226 2024/08/21 19:35:31 job Exp $ */
|
/* $OpenBSD: extern.h,v 1.227 2024/08/29 09:53:04 job Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
*
|
*
|
||||||
|
@ -985,6 +985,9 @@ int mkpathat(int, const char *);
|
||||||
|
|
||||||
#define DEFAULT_SKIPLIST_FILE "/etc/rpki/skiplist"
|
#define DEFAULT_SKIPLIST_FILE "/etc/rpki/skiplist"
|
||||||
|
|
||||||
|
/* Interval in which random reinitialization to an RRDP snapshot happens. */
|
||||||
|
#define RRDP_RANDOM_REINIT_MAX 12 /* weeks */
|
||||||
|
|
||||||
/* Maximum number of TAL files we'll load. */
|
/* Maximum number of TAL files we'll load. */
|
||||||
#define TALSZ_MAX 8
|
#define TALSZ_MAX 8
|
||||||
#define CERTID_MAX 1000000
|
#define CERTID_MAX 1000000
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: io.c,v 1.24 2023/12/12 15:54:18 claudio Exp $ */
|
/* $OpenBSD: io.c,v 1.25 2024/08/28 09:39:17 tb Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021 Claudio Jeker <claudio@openbsd.org>
|
* Copyright (c) 2021 Claudio Jeker <claudio@openbsd.org>
|
||||||
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
|
@ -151,14 +151,15 @@ ibuf_realloc(struct ibuf *buf, size_t len)
|
||||||
unsigned char *b;
|
unsigned char *b;
|
||||||
|
|
||||||
/* on static buffers max is eq size and so the following fails */
|
/* on static buffers max is eq size and so the following fails */
|
||||||
if (buf->wpos + len > buf->max) {
|
if (len > SIZE_MAX - buf->wpos || buf->wpos + len > buf->max) {
|
||||||
errno = ERANGE;
|
errno = ERANGE;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
b = recallocarray(buf->buf, buf->size, buf->wpos + len, 1);
|
b = realloc(buf->buf, buf->wpos + len);
|
||||||
if (b == NULL)
|
if (b == NULL)
|
||||||
return (-1);
|
return (-1);
|
||||||
|
memset(b + buf->size, 0, buf->wpos + len - buf->size);
|
||||||
buf->buf = b;
|
buf->buf = b;
|
||||||
buf->size = buf->wpos + len;
|
buf->size = buf->wpos + len;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: parser.c,v 1.142 2024/08/20 13:31:49 claudio Exp $ */
|
/* $OpenBSD: parser.c,v 1.143 2024/08/29 13:46:28 tb Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2019 Claudio Jeker <claudio@openbsd.org>
|
* Copyright (c) 2019 Claudio Jeker <claudio@openbsd.org>
|
||||||
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
|
@ -166,35 +166,37 @@ proc_parser_roa(char *file, const unsigned char *der, size_t len,
|
||||||
const struct entity *entp)
|
const struct entity *entp)
|
||||||
{
|
{
|
||||||
struct roa *roa;
|
struct roa *roa;
|
||||||
|
X509 *x509 = NULL;
|
||||||
struct auth *a;
|
struct auth *a;
|
||||||
struct crl *crl;
|
struct crl *crl;
|
||||||
X509 *x509;
|
|
||||||
const char *errstr;
|
const char *errstr;
|
||||||
|
|
||||||
if ((roa = roa_parse(&x509, file, entp->talid, der, len)) == NULL)
|
if ((roa = roa_parse(&x509, file, entp->talid, der, len)) == NULL)
|
||||||
return NULL;
|
goto out;
|
||||||
|
|
||||||
a = find_issuer(file, entp->certid, roa->aki, entp->mftaki);
|
a = find_issuer(file, entp->certid, roa->aki, entp->mftaki);
|
||||||
if (a == NULL) {
|
if (a == NULL)
|
||||||
X509_free(x509);
|
goto out;
|
||||||
roa_free(roa);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
crl = crl_get(&crlt, a);
|
crl = crl_get(&crlt, a);
|
||||||
|
|
||||||
if (!valid_x509(file, ctx, x509, a, crl, &errstr)) {
|
if (!valid_x509(file, ctx, x509, a, crl, &errstr)) {
|
||||||
warnx("%s: %s", file, errstr);
|
warnx("%s: %s", file, errstr);
|
||||||
X509_free(x509);
|
goto out;
|
||||||
roa_free(roa);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
X509_free(x509);
|
X509_free(x509);
|
||||||
|
x509 = NULL;
|
||||||
|
|
||||||
roa->talid = a->cert->talid;
|
roa->talid = a->cert->talid;
|
||||||
|
|
||||||
roa->expires = x509_find_expires(roa->notafter, a, &crlt);
|
roa->expires = x509_find_expires(roa->notafter, a, &crlt);
|
||||||
|
|
||||||
return roa;
|
return roa;
|
||||||
|
|
||||||
|
out:
|
||||||
|
roa_free(roa);
|
||||||
|
X509_free(x509);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -206,35 +208,37 @@ proc_parser_spl(char *file, const unsigned char *der, size_t len,
|
||||||
const struct entity *entp)
|
const struct entity *entp)
|
||||||
{
|
{
|
||||||
struct spl *spl;
|
struct spl *spl;
|
||||||
|
X509 *x509 = NULL;
|
||||||
struct auth *a;
|
struct auth *a;
|
||||||
struct crl *crl;
|
struct crl *crl;
|
||||||
X509 *x509;
|
|
||||||
const char *errstr;
|
const char *errstr;
|
||||||
|
|
||||||
if ((spl = spl_parse(&x509, file, entp->talid, der, len)) == NULL)
|
if ((spl = spl_parse(&x509, file, entp->talid, der, len)) == NULL)
|
||||||
return NULL;
|
goto out;
|
||||||
|
|
||||||
a = find_issuer(file, entp->certid, spl->aki, entp->mftaki);
|
a = find_issuer(file, entp->certid, spl->aki, entp->mftaki);
|
||||||
if (a == NULL) {
|
if (a == NULL)
|
||||||
X509_free(x509);
|
goto out;
|
||||||
spl_free(spl);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
crl = crl_get(&crlt, a);
|
crl = crl_get(&crlt, a);
|
||||||
|
|
||||||
if (!valid_x509(file, ctx, x509, a, crl, &errstr)) {
|
if (!valid_x509(file, ctx, x509, a, crl, &errstr)) {
|
||||||
warnx("%s: %s", file, errstr);
|
warnx("%s: %s", file, errstr);
|
||||||
X509_free(x509);
|
goto out;
|
||||||
spl_free(spl);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
X509_free(x509);
|
X509_free(x509);
|
||||||
|
x509 = NULL;
|
||||||
|
|
||||||
spl->talid = a->cert->talid;
|
spl->talid = a->cert->talid;
|
||||||
|
|
||||||
spl->expires = x509_find_expires(spl->notafter, a, &crlt);
|
spl->expires = x509_find_expires(spl->notafter, a, &crlt);
|
||||||
|
|
||||||
return spl;
|
return spl;
|
||||||
|
|
||||||
|
out:
|
||||||
|
spl_free(spl);
|
||||||
|
X509_free(x509);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -556,30 +560,25 @@ proc_parser_cert(char *file, const unsigned char *der, size_t len,
|
||||||
cert = cert_parse_pre(file, der, len);
|
cert = cert_parse_pre(file, der, len);
|
||||||
cert = cert_parse(file, cert);
|
cert = cert_parse(file, cert);
|
||||||
if (cert == NULL)
|
if (cert == NULL)
|
||||||
return NULL;
|
goto out;
|
||||||
|
|
||||||
a = find_issuer(file, entp->certid, cert->aki, entp->mftaki);
|
a = find_issuer(file, entp->certid, cert->aki, entp->mftaki);
|
||||||
if (a == NULL) {
|
if (a == NULL)
|
||||||
cert_free(cert);
|
goto out;
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
crl = crl_get(&crlt, a);
|
crl = crl_get(&crlt, a);
|
||||||
|
|
||||||
if (!valid_x509(file, ctx, cert->x509, a, crl, &errstr) ||
|
if (!valid_x509(file, ctx, cert->x509, a, crl, &errstr) ||
|
||||||
!valid_cert(file, a, cert)) {
|
!valid_cert(file, a, cert)) {
|
||||||
if (errstr != NULL)
|
if (errstr != NULL)
|
||||||
warnx("%s: %s", file, errstr);
|
warnx("%s: %s", file, errstr);
|
||||||
cert_free(cert);
|
goto out;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cert->talid = a->cert->talid;
|
cert->talid = a->cert->talid;
|
||||||
|
|
||||||
if (cert->purpose == CERT_PURPOSE_BGPSEC_ROUTER) {
|
if (cert->purpose == CERT_PURPOSE_BGPSEC_ROUTER) {
|
||||||
if (!constraints_validate(file, cert)) {
|
if (!constraints_validate(file, cert))
|
||||||
cert_free(cert);
|
goto out;
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -589,6 +588,11 @@ proc_parser_cert(char *file, const unsigned char *der, size_t len,
|
||||||
auth_insert(file, &auths, cert, a);
|
auth_insert(file, &auths, cert, a);
|
||||||
|
|
||||||
return cert;
|
return cert;
|
||||||
|
|
||||||
|
out:
|
||||||
|
cert_free(cert);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -696,33 +700,35 @@ proc_parser_gbr(char *file, const unsigned char *der, size_t len,
|
||||||
const struct entity *entp)
|
const struct entity *entp)
|
||||||
{
|
{
|
||||||
struct gbr *gbr;
|
struct gbr *gbr;
|
||||||
X509 *x509;
|
X509 *x509 = NULL;
|
||||||
struct crl *crl;
|
struct crl *crl;
|
||||||
struct auth *a;
|
struct auth *a;
|
||||||
const char *errstr;
|
const char *errstr;
|
||||||
|
|
||||||
if ((gbr = gbr_parse(&x509, file, entp->talid, der, len)) == NULL)
|
if ((gbr = gbr_parse(&x509, file, entp->talid, der, len)) == NULL)
|
||||||
return NULL;
|
goto out;
|
||||||
|
|
||||||
a = find_issuer(file, entp->certid, gbr->aki, entp->mftaki);
|
a = find_issuer(file, entp->certid, gbr->aki, entp->mftaki);
|
||||||
if (a == NULL) {
|
if (a == NULL)
|
||||||
X509_free(x509);
|
goto out;
|
||||||
gbr_free(gbr);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
crl = crl_get(&crlt, a);
|
crl = crl_get(&crlt, a);
|
||||||
|
|
||||||
if (!valid_x509(file, ctx, x509, a, crl, &errstr)) {
|
if (!valid_x509(file, ctx, x509, a, crl, &errstr)) {
|
||||||
warnx("%s: %s", file, errstr);
|
warnx("%s: %s", file, errstr);
|
||||||
X509_free(x509);
|
goto out;
|
||||||
gbr_free(gbr);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
X509_free(x509);
|
X509_free(x509);
|
||||||
|
x509 = NULL;
|
||||||
|
|
||||||
gbr->talid = a->cert->talid;
|
gbr->talid = a->cert->talid;
|
||||||
|
|
||||||
return gbr;
|
return gbr;
|
||||||
|
|
||||||
|
out:
|
||||||
|
gbr_free(gbr);
|
||||||
|
X509_free(x509);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -733,35 +739,37 @@ proc_parser_aspa(char *file, const unsigned char *der, size_t len,
|
||||||
const struct entity *entp)
|
const struct entity *entp)
|
||||||
{
|
{
|
||||||
struct aspa *aspa;
|
struct aspa *aspa;
|
||||||
|
X509 *x509 = NULL;
|
||||||
struct auth *a;
|
struct auth *a;
|
||||||
struct crl *crl;
|
struct crl *crl;
|
||||||
X509 *x509;
|
|
||||||
const char *errstr;
|
const char *errstr;
|
||||||
|
|
||||||
if ((aspa = aspa_parse(&x509, file, entp->talid, der, len)) == NULL)
|
if ((aspa = aspa_parse(&x509, file, entp->talid, der, len)) == NULL)
|
||||||
return NULL;
|
goto out;
|
||||||
|
|
||||||
a = find_issuer(file, entp->certid, aspa->aki, entp->mftaki);
|
a = find_issuer(file, entp->certid, aspa->aki, entp->mftaki);
|
||||||
if (a == NULL) {
|
if (a == NULL)
|
||||||
X509_free(x509);
|
goto out;
|
||||||
aspa_free(aspa);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
crl = crl_get(&crlt, a);
|
crl = crl_get(&crlt, a);
|
||||||
|
|
||||||
if (!valid_x509(file, ctx, x509, a, crl, &errstr)) {
|
if (!valid_x509(file, ctx, x509, a, crl, &errstr)) {
|
||||||
warnx("%s: %s", file, errstr);
|
warnx("%s: %s", file, errstr);
|
||||||
X509_free(x509);
|
goto out;
|
||||||
aspa_free(aspa);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
X509_free(x509);
|
X509_free(x509);
|
||||||
|
x509 = NULL;
|
||||||
|
|
||||||
aspa->talid = a->cert->talid;
|
aspa->talid = a->cert->talid;
|
||||||
|
|
||||||
aspa->expires = x509_find_expires(aspa->notafter, a, &crlt);
|
aspa->expires = x509_find_expires(aspa->notafter, a, &crlt);
|
||||||
|
|
||||||
return aspa;
|
return aspa;
|
||||||
|
|
||||||
|
out:
|
||||||
|
aspa_free(aspa);
|
||||||
|
X509_free(x509);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -772,14 +780,13 @@ proc_parser_tak(char *file, const unsigned char *der, size_t len,
|
||||||
const struct entity *entp)
|
const struct entity *entp)
|
||||||
{
|
{
|
||||||
struct tak *tak;
|
struct tak *tak;
|
||||||
X509 *x509;
|
X509 *x509 = NULL;
|
||||||
struct crl *crl;
|
struct crl *crl;
|
||||||
struct auth *a;
|
struct auth *a;
|
||||||
const char *errstr;
|
const char *errstr;
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
if ((tak = tak_parse(&x509, file, entp->talid, der, len)) == NULL)
|
if ((tak = tak_parse(&x509, file, entp->talid, der, len)) == NULL)
|
||||||
return NULL;
|
goto out;
|
||||||
|
|
||||||
a = find_issuer(file, entp->certid, tak->aki, entp->mftaki);
|
a = find_issuer(file, entp->certid, tak->aki, entp->mftaki);
|
||||||
if (a == NULL)
|
if (a == NULL)
|
||||||
|
@ -790,20 +797,22 @@ proc_parser_tak(char *file, const unsigned char *der, size_t len,
|
||||||
warnx("%s: %s", file, errstr);
|
warnx("%s: %s", file, errstr);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
X509_free(x509);
|
||||||
|
x509 = NULL;
|
||||||
|
|
||||||
/* TAK EE must be signed by self-signed CA */
|
/* TAK EE must be signed by self-signed CA */
|
||||||
if (a->issuer != NULL)
|
if (a->issuer != NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
tak->talid = a->cert->talid;
|
tak->talid = a->cert->talid;
|
||||||
rc = 1;
|
|
||||||
out:
|
|
||||||
if (rc == 0) {
|
|
||||||
tak_free(tak);
|
|
||||||
tak = NULL;
|
|
||||||
}
|
|
||||||
X509_free(x509);
|
|
||||||
return tak;
|
return tak;
|
||||||
|
|
||||||
|
out:
|
||||||
|
tak_free(tak);
|
||||||
|
X509_free(x509);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: repo.c,v 1.62 2024/08/15 11:30:43 job Exp $ */
|
/* $OpenBSD: repo.c,v 1.64 2024/08/29 09:54:13 job Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021 Claudio Jeker <claudio@openbsd.org>
|
* Copyright (c) 2021 Claudio Jeker <claudio@openbsd.org>
|
||||||
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
|
@ -62,6 +62,7 @@ struct rrdprepo {
|
||||||
struct filepath_tree deleted;
|
struct filepath_tree deleted;
|
||||||
unsigned int id;
|
unsigned int id;
|
||||||
enum repo_state state;
|
enum repo_state state;
|
||||||
|
time_t last_reset;
|
||||||
};
|
};
|
||||||
static SLIST_HEAD(, rrdprepo) rrdprepos = SLIST_HEAD_INITIALIZER(rrdprepos);
|
static SLIST_HEAD(, rrdprepo) rrdprepos = SLIST_HEAD_INITIALIZER(rrdprepos);
|
||||||
|
|
||||||
|
@ -651,7 +652,7 @@ repo_alloc(int talid)
|
||||||
* based on that information.
|
* based on that information.
|
||||||
*/
|
*/
|
||||||
static struct rrdp_session *
|
static struct rrdp_session *
|
||||||
rrdp_session_parse(const struct rrdprepo *rr)
|
rrdp_session_parse(struct rrdprepo *rr)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
struct rrdp_session *state;
|
struct rrdp_session *state;
|
||||||
|
@ -660,6 +661,9 @@ rrdp_session_parse(const struct rrdprepo *rr)
|
||||||
char *line = NULL, *file;
|
char *line = NULL, *file;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
ssize_t n;
|
ssize_t n;
|
||||||
|
time_t now, weeks;
|
||||||
|
|
||||||
|
now = time(NULL);
|
||||||
|
|
||||||
if ((state = calloc(1, sizeof(*state))) == NULL)
|
if ((state = calloc(1, sizeof(*state))) == NULL)
|
||||||
err(1, NULL);
|
err(1, NULL);
|
||||||
|
@ -690,6 +694,11 @@ rrdp_session_parse(const struct rrdprepo *rr)
|
||||||
goto fail;
|
goto fail;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
rr->last_reset = strtonum(line, 1, LLONG_MAX, &errstr);
|
||||||
|
if (errstr)
|
||||||
|
goto fail;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
if (strcmp(line, "-") == 0)
|
if (strcmp(line, "-") == 0)
|
||||||
break;
|
break;
|
||||||
if ((state->last_mod = strdup(line)) == NULL)
|
if ((state->last_mod = strdup(line)) == NULL)
|
||||||
|
@ -705,6 +714,17 @@ rrdp_session_parse(const struct rrdprepo *rr)
|
||||||
ln++;
|
ln++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check if it's time for reinitialization */
|
||||||
|
weeks = (now - rr->last_reset) / (86400 * 7);
|
||||||
|
if (now <= rr->last_reset || weeks > RRDP_RANDOM_REINIT_MAX) {
|
||||||
|
warnx("%s: reinitializing", rr->notifyuri);
|
||||||
|
goto reset;
|
||||||
|
}
|
||||||
|
if (arc4random_uniform(1 << RRDP_RANDOM_REINIT_MAX) < (1 << weeks)) {
|
||||||
|
warnx("%s: reinitializing", rr->notifyuri);
|
||||||
|
goto reset;
|
||||||
|
}
|
||||||
|
|
||||||
if (ferror(f))
|
if (ferror(f))
|
||||||
goto fail;
|
goto fail;
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
@ -712,12 +732,15 @@ rrdp_session_parse(const struct rrdprepo *rr)
|
||||||
return state;
|
return state;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
warnx("%s: troubles reading state file", rr->basedir);
|
warnx("%s: corrupted state file, reinitializing", rr->basedir);
|
||||||
|
|
||||||
|
reset:
|
||||||
fclose(f);
|
fclose(f);
|
||||||
free(line);
|
free(line);
|
||||||
free(state->session_id);
|
free(state->session_id);
|
||||||
free(state->last_mod);
|
free(state->last_mod);
|
||||||
memset(state, 0, sizeof(*state));
|
memset(state, 0, sizeof(*state));
|
||||||
|
rr->last_reset = now;
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -747,8 +770,8 @@ rrdp_session_save(unsigned int id, struct rrdp_session *state)
|
||||||
err(1, "fdopen");
|
err(1, "fdopen");
|
||||||
|
|
||||||
/* write session state file out */
|
/* write session state file out */
|
||||||
if (fprintf(f, "%s\n%lld\n", state->session_id,
|
if (fprintf(f, "%s\n%lld\n%lld\n", state->session_id,
|
||||||
state->serial) < 0)
|
state->serial, (long long)rr->last_reset) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (state->last_mod != NULL) {
|
if (state->last_mod != NULL) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue