sync with OpenBSD -current
This commit is contained in:
parent
3c3b8be419
commit
3b3e4312d9
62 changed files with 634 additions and 419 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: aes.h,v 1.15 2023/07/31 05:04:06 tb Exp $ */
|
||||
/* $OpenBSD: aes.h,v 1.16 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -54,10 +54,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h>
|
||||
|
||||
#ifdef OPENSSL_NO_AES
|
||||
#error AES is disabled.
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#define AES_ENCRYPT 1
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: aes_local.h,v 1.3 2024/03/27 11:15:44 jsing Exp $ */
|
||||
/* $OpenBSD: aes_local.h,v 1.4 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -54,10 +54,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h>
|
||||
|
||||
#ifdef OPENSSL_NO_AES
|
||||
#error AES is disabled.
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: blowfish.h,v 1.17 2023/07/31 05:04:06 tb Exp $ */
|
||||
/* $OpenBSD: blowfish.h,v 1.18 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -65,10 +65,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef OPENSSL_NO_BF
|
||||
#error BF is disabled.
|
||||
#endif
|
||||
|
||||
#define BF_ENCRYPT 1
|
||||
#define BF_DECRYPT 0
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: camellia.h,v 1.5 2014/11/13 20:01:58 miod Exp $ */
|
||||
/* $OpenBSD: camellia.h,v 1.6 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -54,10 +54,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h>
|
||||
|
||||
#ifdef OPENSSL_NO_CAMELLIA
|
||||
#error CAMELLIA is disabled.
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#define CAMELLIA_ENCRYPT 1
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: cast.h,v 1.13 2023/07/08 07:25:43 jsing Exp $ */
|
||||
/* $OpenBSD: cast.h,v 1.14 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -65,10 +65,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef OPENSSL_NO_CAST
|
||||
#error CAST is disabled.
|
||||
#endif
|
||||
|
||||
#define CAST_ENCRYPT 1
|
||||
#define CAST_DECRYPT 0
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: chacha.h,v 1.8 2019/01/22 00:59:21 dlg Exp $ */
|
||||
/* $OpenBSD: chacha.h,v 1.9 2025/01/25 17:59:44 tb Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
|
||||
*
|
||||
|
@ -20,10 +20,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h>
|
||||
|
||||
#if defined(OPENSSL_NO_CHACHA)
|
||||
#error ChaCha is disabled.
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: des.h,v 1.22 2024/08/31 10:30:16 tb Exp $ */
|
||||
/* $OpenBSD: des.h,v 1.23 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -61,10 +61,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h>
|
||||
|
||||
#ifdef OPENSSL_NO_DES
|
||||
#error DES is disabled.
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: dh.h,v 1.37 2023/04/18 08:33:43 tb Exp $ */
|
||||
/* $OpenBSD: dh.h,v 1.38 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -61,10 +61,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h>
|
||||
|
||||
#ifdef OPENSSL_NO_DH
|
||||
#error DH is disabled.
|
||||
#endif
|
||||
|
||||
#ifndef OPENSSL_NO_BIO
|
||||
#include <openssl/bio.h>
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: dsa.h,v 1.46 2024/12/05 19:34:46 tb Exp $ */
|
||||
/* $OpenBSD: dsa.h,v 1.47 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -67,10 +67,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h>
|
||||
|
||||
#ifdef OPENSSL_NO_DSA
|
||||
#error DSA is disabled.
|
||||
#endif
|
||||
|
||||
#ifndef OPENSSL_NO_BIO
|
||||
#include <openssl/bio.h>
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ec.h,v 1.48 2024/04/15 15:42:23 tb Exp $ */
|
||||
/* $OpenBSD: ec.h,v 1.49 2025/01/25 17:59:44 tb Exp $ */
|
||||
/*
|
||||
* Originally written by Bodo Moeller for the OpenSSL project.
|
||||
*/
|
||||
|
@ -73,10 +73,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h>
|
||||
|
||||
#ifdef OPENSSL_NO_EC
|
||||
#error EC is disabled.
|
||||
#endif
|
||||
|
||||
#include <openssl/asn1.h>
|
||||
#include <openssl/bn.h>
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ec_asn1.c,v 1.109 2024/12/06 05:13:35 tb Exp $ */
|
||||
/* $OpenBSD: ec_asn1.c,v 1.110 2025/01/25 10:27:58 tb Exp $ */
|
||||
/*
|
||||
* Written by Nils Larsch for the OpenSSL project.
|
||||
*/
|
||||
|
@ -651,36 +651,16 @@ ec_point_to_asn1_octet_string(const EC_GROUP *group, const EC_POINT *point,
|
|||
static int
|
||||
ec_asn1_group2fieldid(const EC_GROUP *group, X9_62_FIELDID *field)
|
||||
{
|
||||
BIGNUM *p = NULL;
|
||||
int nid;
|
||||
int ret = 0;
|
||||
|
||||
if (group == NULL || field == NULL)
|
||||
goto err;
|
||||
|
||||
nid = ec_group_get_field_type(group);
|
||||
if (nid == NID_X9_62_characteristic_two_field) {
|
||||
ECerror(EC_R_GF2M_NOT_SUPPORTED);
|
||||
goto err;
|
||||
}
|
||||
if (nid != NID_X9_62_prime_field) {
|
||||
ECerror(EC_R_INVALID_FIELD);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if ((field->fieldType = OBJ_nid2obj(nid)) == NULL) {
|
||||
if ((field->fieldType = OBJ_nid2obj(NID_X9_62_prime_field)) == NULL) {
|
||||
ECerror(ERR_R_OBJ_LIB);
|
||||
goto err;
|
||||
}
|
||||
if ((p = BN_new()) == NULL) {
|
||||
ECerror(ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
if (!EC_GROUP_get_curve(group, p, NULL, NULL, NULL)) {
|
||||
ECerror(ERR_R_EC_LIB);
|
||||
goto err;
|
||||
}
|
||||
if ((field->p.prime = BN_to_ASN1_INTEGER(p, NULL)) == NULL) {
|
||||
if ((field->p.prime = BN_to_ASN1_INTEGER(group->p, NULL)) == NULL) {
|
||||
ECerror(ERR_R_ASN1_LIB);
|
||||
goto err;
|
||||
}
|
||||
|
@ -688,8 +668,6 @@ ec_asn1_group2fieldid(const EC_GROUP *group, X9_62_FIELDID *field)
|
|||
ret = 1;
|
||||
|
||||
err:
|
||||
BN_free(p);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ec_key.c,v 1.50 2025/01/11 20:57:03 tb Exp $ */
|
||||
/* $OpenBSD: ec_key.c,v 1.51 2025/01/25 10:34:36 tb Exp $ */
|
||||
/*
|
||||
* Written by Nils Larsch for the OpenSSL project.
|
||||
*/
|
||||
|
@ -513,7 +513,7 @@ EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx)
|
|||
{
|
||||
if (key->group == NULL)
|
||||
return 0;
|
||||
return EC_GROUP_precompute_mult(key->group, ctx);
|
||||
return 1;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_KEY_precompute_mult);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ec_lib.c,v 1.113 2025/01/22 09:56:58 jsing Exp $ */
|
||||
/* $OpenBSD: ec_lib.c,v 1.116 2025/01/25 13:13:57 tb Exp $ */
|
||||
/*
|
||||
* Originally written by Bodo Moeller for the OpenSSL project.
|
||||
*/
|
||||
|
@ -222,29 +222,6 @@ EC_GROUP_dup(const EC_GROUP *in_group)
|
|||
}
|
||||
LCRYPTO_ALIAS(EC_GROUP_dup);
|
||||
|
||||
const EC_METHOD *
|
||||
EC_GROUP_method_of(const EC_GROUP *group)
|
||||
{
|
||||
return group->meth;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_GROUP_method_of);
|
||||
|
||||
int
|
||||
EC_METHOD_get_field_type(const EC_METHOD *meth)
|
||||
{
|
||||
return meth->field_type;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_METHOD_get_field_type);
|
||||
|
||||
int
|
||||
ec_group_get_field_type(const EC_GROUP *group)
|
||||
{
|
||||
if (group == NULL || group->meth == NULL)
|
||||
return NID_undef;
|
||||
|
||||
return group->meth->field_type;
|
||||
}
|
||||
|
||||
/*
|
||||
* If there is a user-provided cofactor, sanity check and use it. Otherwise
|
||||
* try computing the cofactor from generator order n and field cardinality p.
|
||||
|
@ -738,8 +715,6 @@ EC_GROUP_cmp(const EC_GROUP *group1, const EC_GROUP *group2, BN_CTX *ctx_in)
|
|||
|
||||
BN_CTX_start(ctx);
|
||||
|
||||
if (ec_group_get_field_type(group1) != ec_group_get_field_type(group2))
|
||||
goto distinct;
|
||||
if ((nid1 = EC_GROUP_get_curve_name(group1)) != NID_undef &&
|
||||
(nid2 = EC_GROUP_get_curve_name(group2)) != NID_undef) {
|
||||
if (nid1 != nid2)
|
||||
|
@ -914,13 +889,6 @@ EC_POINT_dup(const EC_POINT *in_point, const EC_GROUP *group)
|
|||
}
|
||||
LCRYPTO_ALIAS(EC_POINT_dup);
|
||||
|
||||
const EC_METHOD *
|
||||
EC_POINT_method_of(const EC_POINT *point)
|
||||
{
|
||||
return point->meth;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_POINT_method_of);
|
||||
|
||||
int
|
||||
EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point)
|
||||
{
|
||||
|
@ -1397,20 +1365,6 @@ EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *g_scalar,
|
|||
}
|
||||
LCRYPTO_ALIAS(EC_POINT_mul);
|
||||
|
||||
int
|
||||
EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx_in)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_GROUP_precompute_mult);
|
||||
|
||||
int
|
||||
EC_GROUP_have_precompute_mult(const EC_GROUP *group)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_GROUP_have_precompute_mult);
|
||||
|
||||
/*
|
||||
* XXX - remove everything below in the next bump
|
||||
*/
|
||||
|
@ -1451,3 +1405,43 @@ EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
|||
return 0;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_POINTs_mul);
|
||||
|
||||
const EC_METHOD *
|
||||
EC_GROUP_method_of(const EC_GROUP *group)
|
||||
{
|
||||
ECerror(ERR_R_DISABLED);
|
||||
return NULL;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_GROUP_method_of);
|
||||
|
||||
int
|
||||
EC_METHOD_get_field_type(const EC_METHOD *meth)
|
||||
{
|
||||
ECerror(ERR_R_DISABLED);
|
||||
return NID_undef;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_METHOD_get_field_type);
|
||||
|
||||
const EC_METHOD *
|
||||
EC_POINT_method_of(const EC_POINT *point)
|
||||
{
|
||||
ECerror(ERR_R_DISABLED);
|
||||
return NULL;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_POINT_method_of);
|
||||
|
||||
int
|
||||
EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx_in)
|
||||
{
|
||||
ECerror(ERR_R_DISABLED);
|
||||
return 0;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_GROUP_precompute_mult);
|
||||
|
||||
int
|
||||
EC_GROUP_have_precompute_mult(const EC_GROUP *group)
|
||||
{
|
||||
ECerror(ERR_R_DISABLED);
|
||||
return 0;
|
||||
}
|
||||
LCRYPTO_ALIAS(EC_GROUP_have_precompute_mult);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ec_local.h,v 1.63 2025/01/22 09:56:58 jsing Exp $ */
|
||||
/* $OpenBSD: ec_local.h,v 1.65 2025/01/25 13:15:21 tb Exp $ */
|
||||
/*
|
||||
* Originally written by Bodo Moeller for the OpenSSL project.
|
||||
*/
|
||||
|
@ -80,8 +80,6 @@
|
|||
__BEGIN_HIDDEN_DECLS
|
||||
|
||||
struct ec_method_st {
|
||||
int field_type;
|
||||
|
||||
int (*group_set_curve)(EC_GROUP *, const BIGNUM *p, const BIGNUM *a,
|
||||
const BIGNUM *b, BN_CTX *);
|
||||
int (*group_get_curve)(const EC_GROUP *, BIGNUM *p, BIGNUM *a,
|
||||
|
@ -177,7 +175,6 @@ int ec_wnaf_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *m,
|
|||
const EC_POINT *point, const BIGNUM *n, BN_CTX *ctx);
|
||||
|
||||
int ec_group_is_builtin_curve(const EC_GROUP *group, int *out_nid);
|
||||
int ec_group_get_field_type(const EC_GROUP *group);
|
||||
|
||||
/*
|
||||
* Wrappers around the unergonomic EC_POINT_{oct2point,point2oct}().
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: eck_prn.c,v 1.40 2024/11/25 06:51:39 tb Exp $ */
|
||||
/* $OpenBSD: eck_prn.c,v 1.41 2025/01/25 10:30:17 tb Exp $ */
|
||||
/*
|
||||
* Written by Nils Larsch for the OpenSSL project.
|
||||
*/
|
||||
|
@ -208,7 +208,6 @@ ecpk_print_explicit_parameters(BIO *bio, const EC_GROUP *group, int off)
|
|||
const unsigned char *seed;
|
||||
size_t seed_len;
|
||||
point_conversion_form_t form;
|
||||
int nid;
|
||||
int ret = 0;
|
||||
|
||||
if ((ctx = BN_CTX_new()) == NULL) {
|
||||
|
@ -256,8 +255,7 @@ ecpk_print_explicit_parameters(BIO *bio, const EC_GROUP *group, int off)
|
|||
if (!BIO_indent(bio, off, 128))
|
||||
goto err;
|
||||
|
||||
nid = ec_group_get_field_type(group);
|
||||
if (BIO_printf(bio, "Field Type: %s\n", OBJ_nid2sn(nid)) <= 0)
|
||||
if (BIO_printf(bio, "Field Type: %s\n", SN_X9_62_prime_field) <= 0)
|
||||
goto err;
|
||||
|
||||
if (!bn_printf(bio, p, off, "Prime:"))
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ecp_methods.c,v 1.41 2025/01/22 12:54:40 tb Exp $ */
|
||||
/* $OpenBSD: ecp_methods.c,v 1.42 2025/01/25 13:15:21 tb Exp $ */
|
||||
/* Includes code written by Lenka Fibikova <fibikova@exp-math.uni-essen.de>
|
||||
* for the OpenSSL project.
|
||||
* Includes code written by Bodo Moeller for the OpenSSL project.
|
||||
|
@ -1291,7 +1291,6 @@ ec_mont_field_decode(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a,
|
|||
}
|
||||
|
||||
static const EC_METHOD ec_GFp_simple_method = {
|
||||
.field_type = NID_X9_62_prime_field,
|
||||
.group_set_curve = ec_group_set_curve,
|
||||
.group_get_curve = ec_group_get_curve,
|
||||
.point_is_on_curve = ec_point_is_on_curve,
|
||||
|
@ -1316,7 +1315,6 @@ EC_GFp_simple_method(void)
|
|||
LCRYPTO_ALIAS(EC_GFp_simple_method);
|
||||
|
||||
static const EC_METHOD ec_GFp_mont_method = {
|
||||
.field_type = NID_X9_62_prime_field,
|
||||
.group_set_curve = ec_mont_group_set_curve,
|
||||
.group_get_curve = ec_group_get_curve,
|
||||
.point_is_on_curve = ec_point_is_on_curve,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: hmac.h,v 1.20 2024/08/31 10:42:21 tb Exp $ */
|
||||
/* $OpenBSD: hmac.h,v 1.21 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -64,10 +64,6 @@
|
|||
#define __bounded__(x, y, z)
|
||||
#endif
|
||||
|
||||
#ifdef OPENSSL_NO_HMAC
|
||||
#error HMAC is disabled.
|
||||
#endif
|
||||
|
||||
#include <openssl/evp.h>
|
||||
|
||||
#define HMAC_MAX_MD_CBLOCK 144 /* largest known is SHA3-224 */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: idea.h,v 1.12 2024/05/19 07:12:50 jsg Exp $ */
|
||||
/* $OpenBSD: idea.h,v 1.13 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -61,10 +61,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h> /* IDEA_INT, OPENSSL_NO_IDEA */
|
||||
|
||||
#ifdef OPENSSL_NO_IDEA
|
||||
#error IDEA is disabled.
|
||||
#endif
|
||||
|
||||
#define IDEA_ENCRYPT 1
|
||||
#define IDEA_DECRYPT 0
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: md4.h,v 1.21 2024/06/01 18:42:49 tb Exp $ */
|
||||
/* $OpenBSD: md4.h,v 1.22 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -71,10 +71,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef OPENSSL_NO_MD4
|
||||
#error MD4 is disabled.
|
||||
#endif
|
||||
|
||||
/*
|
||||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
* ! MD4_LONG has to be at least 32 bits wide. !
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: md5.h,v 1.24 2025/01/19 07:51:41 jsing Exp $ */
|
||||
/* $OpenBSD: md5.h,v 1.25 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -71,10 +71,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef OPENSSL_NO_MD5
|
||||
#error MD5 is disabled.
|
||||
#endif
|
||||
|
||||
#define MD5_LONG unsigned int
|
||||
|
||||
#define MD5_CBLOCK 64
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: poly1305.h,v 1.3 2014/07/25 14:04:51 jsing Exp $ */
|
||||
/* $OpenBSD: poly1305.h,v 1.4 2025/01/25 17:59:44 tb Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
|
||||
*
|
||||
|
@ -20,10 +20,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h>
|
||||
|
||||
#if defined(OPENSSL_NO_POLY1305)
|
||||
#error Poly1305 is disabled.
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: rc2.h,v 1.12 2023/07/07 08:29:37 beck Exp $ */
|
||||
/* $OpenBSD: rc2.h,v 1.13 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -61,10 +61,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h> /* OPENSSL_NO_RC2, RC2_INT */
|
||||
|
||||
#ifdef OPENSSL_NO_RC2
|
||||
#error RC2 is disabled.
|
||||
#endif
|
||||
|
||||
#define RC2_ENCRYPT 1
|
||||
#define RC2_DECRYPT 0
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: rc4.h,v 1.15 2024/03/27 12:13:08 jsing Exp $ */
|
||||
/* $OpenBSD: rc4.h,v 1.16 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -61,10 +61,6 @@
|
|||
|
||||
#include <openssl/opensslconf.h> /* OPENSSL_NO_RC4, RC4_INT */
|
||||
|
||||
#ifdef OPENSSL_NO_RC4
|
||||
#error RC4 is disabled.
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ripemd.h,v 1.19 2024/06/01 18:42:49 tb Exp $ */
|
||||
/* $OpenBSD: ripemd.h,v 1.20 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -71,10 +71,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef OPENSSL_NO_RIPEMD
|
||||
#error RIPEMD is disabled.
|
||||
#endif
|
||||
|
||||
#if defined(__LP32__)
|
||||
#define RIPEMD160_LONG unsigned long
|
||||
#elif defined(__ILP64__)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: rsa.h,v 1.66 2024/05/19 07:12:50 jsg Exp $ */
|
||||
/* $OpenBSD: rsa.h,v 1.67 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -71,10 +71,6 @@
|
|||
|
||||
#include <openssl/ossl_typ.h>
|
||||
|
||||
#ifdef OPENSSL_NO_RSA
|
||||
#error RSA is disabled.
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: sha.h,v 1.25 2024/06/01 08:11:44 tb Exp $ */
|
||||
/* $OpenBSD: sha.h,v 1.26 2025/01/25 17:59:44 tb Exp $ */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -70,10 +70,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA1)
|
||||
#error SHA is disabled.
|
||||
#endif
|
||||
|
||||
/*
|
||||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
* ! SHA_LONG has to be at least 32 bits wide. !
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: sm2.h,v 1.3 2023/07/28 15:50:33 tb Exp $ */
|
||||
/* $OpenBSD: sm2.h,v 1.4 2025/01/25 17:59:44 tb Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2017, 2019 Ribose Inc
|
||||
*
|
||||
|
@ -22,10 +22,6 @@
|
|||
|
||||
#include <openssl/ec.h>
|
||||
|
||||
#ifdef OPENSSL_NO_SM2
|
||||
#error SM2 is disabled.
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: sm3.h,v 1.1 2018/11/11 06:53:31 tb Exp $ */
|
||||
/* $OpenBSD: sm3.h,v 1.2 2025/01/25 17:59:44 tb Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2018, Ribose Inc
|
||||
*
|
||||
|
@ -25,10 +25,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef OPENSSL_NO_SM3
|
||||
#error SM3 is disabled.
|
||||
#endif
|
||||
|
||||
#define SM3_DIGEST_LENGTH 32
|
||||
#define SM3_WORD unsigned int
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: sm4.h,v 1.1 2019/03/17 17:42:37 tb Exp $ */
|
||||
/* $OpenBSD: sm4.h,v 1.2 2025/01/25 17:59:44 tb Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2017, 2019 Ribose Inc
|
||||
*
|
||||
|
@ -26,10 +26,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef OPENSSL_NO_SM4
|
||||
#error SM4 is disabled.
|
||||
#endif
|
||||
|
||||
#define SM4_DECRYPT 0
|
||||
#define SM4_ENCRYPT 1
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# $OpenBSD: Makefile,v 1.13 2025/01/19 23:01:27 schwarze Exp $
|
||||
# $OpenBSD: Makefile,v 1.14 2025/01/24 23:22:13 schwarze Exp $
|
||||
|
||||
REGRESS_TARGETS = allch args break empty paragraph three_authors rfc transp
|
||||
REGRESS_TARGETS = allch args break empty journal outside paragraph
|
||||
REGRESS_TARGETS += rfc three_authors transp
|
||||
UTF8_TARGETS = allch break empty three_authors
|
||||
LINT_TARGETS = allch args empty
|
||||
HTML_TARGETS = paragraph rfc
|
||||
HTML_TARGETS = journal outside paragraph rfc
|
||||
|
||||
# groff-1.22.3 defect:
|
||||
# - arguments after .Rs cause the macro to be ignored
|
||||
|
|
21
regress/usr.bin/mandoc/mdoc/Rs/journal.in
Normal file
21
regress/usr.bin/mandoc/mdoc/Rs/journal.in
Normal file
|
@ -0,0 +1,21 @@
|
|||
.\" $OpenBSD: journal.in,v 1.1 2025/01/24 23:22:13 schwarze Exp $
|
||||
.Dd $Mdocdate: January 24 2025 $
|
||||
.Dt RS-JOURNAL 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm Rs-journal
|
||||
.Nd reference to a journal article
|
||||
.Sh DESCRIPTION
|
||||
BEGINTEST
|
||||
.Pp
|
||||
.Rs
|
||||
.%A Brian W. Kernighan
|
||||
.%A Lorinda L. Cherry
|
||||
.%T System for Typesetting Mathematics
|
||||
.%J Communications of the ACM
|
||||
.%V 18
|
||||
.%P pp. 151\(en157
|
||||
.%D March 1975
|
||||
.Re
|
||||
.Pp
|
||||
ENDTEST
|
14
regress/usr.bin/mandoc/mdoc/Rs/journal.out_ascii
Normal file
14
regress/usr.bin/mandoc/mdoc/Rs/journal.out_ascii
Normal file
|
@ -0,0 +1,14 @@
|
|||
RS-JOURNAL(1) General Commands Manual RS-JOURNAL(1)
|
||||
|
||||
NNAAMMEE
|
||||
RRss--jjoouurrnnaall - reference to a journal article
|
||||
|
||||
DDEESSCCRRIIPPTTIIOONN
|
||||
BEGINTEST
|
||||
|
||||
Brian W. Kernighan and Lorinda L. Cherry, "System for Typesetting
|
||||
Mathematics", _C_o_m_m_u_n_i_c_a_t_i_o_n_s _o_f _t_h_e _A_C_M, 18, pp. 151-157, March 1975.
|
||||
|
||||
ENDTEST
|
||||
|
||||
OpenBSD January 24, 2025 OpenBSD
|
5
regress/usr.bin/mandoc/mdoc/Rs/journal.out_html
Normal file
5
regress/usr.bin/mandoc/mdoc/Rs/journal.out_html
Normal file
|
@ -0,0 +1,5 @@
|
|||
<p class="Pp"><span class="Rs"><span class="RsA">Brian W. Kernighan</span> and
|
||||
<span class="RsA">Lorinda L. Cherry</span>, “<cite class="RsT">System
|
||||
for Typesetting Mathematics</cite>”, <i class="RsJ">Communications of
|
||||
the ACM</i>, <span class="RsV">18</span>, <span class="RsP">pp.
|
||||
151–157</span>, <span class="RsD">March 1975</span>.</span></p>
|
21
regress/usr.bin/mandoc/mdoc/Rs/journal.out_markdown
Normal file
21
regress/usr.bin/mandoc/mdoc/Rs/journal.out_markdown
Normal file
|
@ -0,0 +1,21 @@
|
|||
RS-JOURNAL(1) - General Commands Manual
|
||||
|
||||
# NAME
|
||||
|
||||
**Rs-journal** - reference to a journal article
|
||||
|
||||
# DESCRIPTION
|
||||
|
||||
BEGINTEST
|
||||
|
||||
Brian W. Kernighan,
|
||||
Lorinda L. Cherry,
|
||||
"System for Typesetting Mathematics",
|
||||
*Communications of the ACM*,
|
||||
18,
|
||||
pp. 151–157,
|
||||
March 1975.
|
||||
|
||||
ENDTEST
|
||||
|
||||
OpenBSD - January 24, 2025
|
18
regress/usr.bin/mandoc/mdoc/Rs/outside.in
Normal file
18
regress/usr.bin/mandoc/mdoc/Rs/outside.in
Normal file
|
@ -0,0 +1,18 @@
|
|||
.\" $OpenBSD: outside.in,v 1.1 2025/01/24 23:22:13 schwarze Exp $
|
||||
.Dd $Mdocdate: January 24 2025 $
|
||||
.Dt RS-OUTSIDE 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm Rs-outside
|
||||
.Nd reference macros outside reference blocks
|
||||
.Sh DESCRIPTION
|
||||
BEGINTEST
|
||||
.Pp
|
||||
Some percent-macros can be used outside reference blocks.
|
||||
For example, let's study
|
||||
.%B The Book of PF
|
||||
and relax reading
|
||||
.%T A Standard for the Transmission of IP Datagrams on Avian Carriers
|
||||
afterwards.
|
||||
.Pp
|
||||
ENDTEST
|
15
regress/usr.bin/mandoc/mdoc/Rs/outside.out_ascii
Normal file
15
regress/usr.bin/mandoc/mdoc/Rs/outside.out_ascii
Normal file
|
@ -0,0 +1,15 @@
|
|||
RS-OUTSIDE(1) General Commands Manual RS-OUTSIDE(1)
|
||||
|
||||
NNAAMMEE
|
||||
RRss--oouuttssiiddee - reference macros outside reference blocks
|
||||
|
||||
DDEESSCCRRIIPPTTIIOONN
|
||||
BEGINTEST
|
||||
|
||||
Some percent-macros can be used outside reference blocks. For example,
|
||||
let's study _T_h_e _B_o_o_k _o_f _P_F and relax reading _A _S_t_a_n_d_a_r_d _f_o_r _t_h_e
|
||||
_T_r_a_n_s_m_i_s_s_i_o_n _o_f _I_P _D_a_t_a_g_r_a_m_s _o_n _A_v_i_a_n _C_a_r_r_i_e_r_s afterwards.
|
||||
|
||||
ENDTEST
|
||||
|
||||
OpenBSD January 24, 2025 OpenBSD
|
4
regress/usr.bin/mandoc/mdoc/Rs/outside.out_html
Normal file
4
regress/usr.bin/mandoc/mdoc/Rs/outside.out_html
Normal file
|
@ -0,0 +1,4 @@
|
|||
<p class="Pp">Some percent-macros can be used outside reference blocks. For
|
||||
example, let's study <cite class="RsB">The Book of PF</cite> and relax
|
||||
reading <cite class="RsB">A Standard for the Transmission of IP Datagrams on
|
||||
Avian Carriers</cite> afterwards.</p>
|
20
regress/usr.bin/mandoc/mdoc/Rs/outside.out_markdown
Normal file
20
regress/usr.bin/mandoc/mdoc/Rs/outside.out_markdown
Normal file
|
@ -0,0 +1,20 @@
|
|||
RS-OUTSIDE(1) - General Commands Manual
|
||||
|
||||
# NAME
|
||||
|
||||
**Rs-outside** - reference macros outside reference blocks
|
||||
|
||||
# DESCRIPTION
|
||||
|
||||
BEGINTEST
|
||||
|
||||
Some percent-macros can be used outside reference blocks.
|
||||
For example, let's study
|
||||
*The Book of PF*
|
||||
and relax reading
|
||||
*A Standard for the Transmission of IP Datagrams on Avian Carriers*
|
||||
afterwards.
|
||||
|
||||
ENDTEST
|
||||
|
||||
OpenBSD - January 24, 2025
|
|
@ -1,15 +1,15 @@
|
|||
<br/>
|
||||
initial reference: <cite class="Rs"><span class="RsA">author name</span>,
|
||||
<i class="RsB">book title</i>.</cite></p>
|
||||
<p class="Pp">in a paragraph: <cite class="Rs"><span class="RsA">another
|
||||
author</span>, <i class="RsB">another book</i>.</cite></p>
|
||||
initial reference: <span class="Rs"><span class="RsA">author name</span>,
|
||||
<cite class="RsB">book title</cite>.</span></p>
|
||||
<p class="Pp">in a paragraph: <span class="Rs"><span class="RsA">another
|
||||
author</span>, <cite class="RsB">another book</cite>.</span></p>
|
||||
</section>
|
||||
<section class="Sh">
|
||||
<h2 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
|
||||
ALSO</a></h2>
|
||||
<p class="Pp">initial reference:</p>
|
||||
<p class="Pp"><cite class="Rs"><span class="RsA">author name</span>,
|
||||
<i class="RsB">book title</i>.</cite></p>
|
||||
<p class="Pp"><span class="Rs"><span class="RsA">author name</span>,
|
||||
<cite class="RsB">book title</cite>.</span></p>
|
||||
<p class="Pp">in a paragraph:</p>
|
||||
<p class="Pp"><cite class="Rs"><span class="RsA">another author</span>,
|
||||
<i class="RsB">another book</i>.</cite></p>
|
||||
<p class="Pp"><span class="Rs"><span class="RsA">another author</span>,
|
||||
<cite class="RsB">another book</cite>.</span></p>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<p class="Pp"><cite class="Rs"><span class="RsA">David Waitzman</span>,
|
||||
<span class="RsT">A Standard for the Transmission of IP Datagrams on Avian
|
||||
Carriers</span>,
|
||||
<p class="Pp"><span class="Rs"><span class="RsA">David Waitzman</span>,
|
||||
<cite class="RsB">A Standard for the Transmission of IP Datagrams on Avian
|
||||
Carriers</cite>,
|
||||
<a class="RsR" href="https://www.rfc-editor.org/rfc/rfc1149.html">RFC
|
||||
1149</a>, <span class="RsD">April 1990</span>.</cite></p>
|
||||
1149</a>, <span class="RsD">April 1990</span>.</span></p>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: cpu.c,v 1.134 2024/11/10 06:51:59 jsg Exp $ */
|
||||
/* $OpenBSD: cpu.c,v 1.135 2025/01/25 12:29:35 kettenis Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2016 Dale Rahn <drahn@dalerahn.com>
|
||||
|
@ -868,19 +868,31 @@ cpu_identify(struct cpu_info *ci)
|
|||
sep = ",";
|
||||
}
|
||||
|
||||
if (ID_AA64ISAR1_API(id) >= ID_AA64ISAR1_API_BASE) {
|
||||
if (ID_AA64ISAR1_API(id) >= ID_AA64ISAR1_API_PAC) {
|
||||
printf("%sAPI", sep);
|
||||
sep = ",";
|
||||
}
|
||||
if (ID_AA64ISAR1_API(id) >= ID_AA64ISAR1_API_PAC)
|
||||
printf("+PAC");
|
||||
if (ID_AA64ISAR1_API(id) == ID_AA64ISAR1_API_EPAC)
|
||||
printf("+EPAC");
|
||||
else if (ID_AA64ISAR1_API(id) >= ID_AA64ISAR1_API_EPAC2)
|
||||
printf("+EPAC2");
|
||||
if (ID_AA64ISAR1_API(id) >= ID_AA64ISAR1_API_FPAC)
|
||||
printf("+FPAC");
|
||||
if (ID_AA64ISAR1_API(id) >= ID_AA64ISAR1_API_FPAC_COMBINED)
|
||||
printf("+COMBINED");
|
||||
|
||||
if (ID_AA64ISAR1_APA(id) >= ID_AA64ISAR1_APA_BASE) {
|
||||
if (ID_AA64ISAR1_APA(id) >= ID_AA64ISAR1_APA_PAC) {
|
||||
printf("%sAPA", sep);
|
||||
sep = ",";
|
||||
}
|
||||
if (ID_AA64ISAR1_APA(id) >= ID_AA64ISAR1_APA_PAC)
|
||||
printf("+PAC");
|
||||
if (ID_AA64ISAR1_APA(id) == ID_AA64ISAR1_APA_EPAC)
|
||||
printf("+EPAC");
|
||||
else if (ID_AA64ISAR1_APA(id) >= ID_AA64ISAR1_APA_EPAC2)
|
||||
printf("+EPAC2");
|
||||
if (ID_AA64ISAR1_APA(id) >= ID_AA64ISAR1_APA_FPAC)
|
||||
printf("+FPAC");
|
||||
if (ID_AA64ISAR1_APA(id) >= ID_AA64ISAR1_APA_FPAC_COMBINED)
|
||||
printf("+COMBINED");
|
||||
|
||||
if (ID_AA64ISAR1_DPB(id) >= ID_AA64ISAR1_DPB_IMPL) {
|
||||
printf("%sDPB", sep);
|
||||
|
@ -919,6 +931,24 @@ cpu_identify(struct cpu_info *ci)
|
|||
sep = ",";
|
||||
}
|
||||
|
||||
if (ID_AA64ISAR2_GPA3(id) >= ID_AA64ISAR2_GPA3_IMPL) {
|
||||
printf("%sGPA3", sep);
|
||||
sep = ",";
|
||||
}
|
||||
|
||||
if (ID_AA64ISAR2_APA3(id) >= ID_AA64ISAR2_APA3_PAC) {
|
||||
printf("%sAPA3", sep);
|
||||
sep = ",";
|
||||
}
|
||||
if (ID_AA64ISAR2_APA3(id) == ID_AA64ISAR2_APA3_EPAC)
|
||||
printf("+EPAC");
|
||||
else if (ID_AA64ISAR2_APA3(id) >= ID_AA64ISAR2_APA3_EPAC2)
|
||||
printf("+EPAC2");
|
||||
if (ID_AA64ISAR2_APA3(id) >= ID_AA64ISAR2_APA3_FPAC)
|
||||
printf("+FPAC");
|
||||
if (ID_AA64ISAR2_APA3(id) >= ID_AA64ISAR2_APA3_FPAC_COMBINED)
|
||||
printf("+COMBINED");
|
||||
|
||||
if (ID_AA64ISAR2_RPRES(id) >= ID_AA64ISAR2_RPRES_IMPL) {
|
||||
printf("%sRPRES", sep);
|
||||
sep = ",";
|
||||
|
@ -1220,8 +1250,8 @@ cpu_identify_cleanup(void)
|
|||
hwcap |= HWCAP_SSBS;
|
||||
if (ID_AA64ISAR1_SB(cpu_id_aa64isar1) >= ID_AA64ISAR1_SB_IMPL)
|
||||
hwcap |= HWCAP_SB;
|
||||
if (ID_AA64ISAR1_APA(cpu_id_aa64isar1) >= ID_AA64ISAR1_APA_BASE ||
|
||||
ID_AA64ISAR1_API(cpu_id_aa64isar1) >= ID_AA64ISAR1_API_BASE)
|
||||
if (ID_AA64ISAR1_APA(cpu_id_aa64isar1) >= ID_AA64ISAR1_APA_PAC ||
|
||||
ID_AA64ISAR1_API(cpu_id_aa64isar1) >= ID_AA64ISAR1_API_PAC)
|
||||
hwcap |= HWCAP_PACA;
|
||||
if (ID_AA64ISAR1_GPA(cpu_id_aa64isar1) >= ID_AA64ISAR1_GPA_IMPL ||
|
||||
ID_AA64ISAR1_GPI(cpu_id_aa64isar1) >= ID_AA64ISAR1_GPI_IMPL)
|
||||
|
@ -1493,8 +1523,8 @@ cpu_init(void)
|
|||
__asm volatile (".arch armv8.4-a; msr dit, #1");
|
||||
|
||||
/* Enable PAuth. */
|
||||
if (ID_AA64ISAR1_APA(cpu_id_aa64isar1) >= ID_AA64ISAR1_APA_BASE ||
|
||||
ID_AA64ISAR1_API(cpu_id_aa64isar1) >= ID_AA64ISAR1_API_BASE) {
|
||||
if (ID_AA64ISAR1_APA(cpu_id_aa64isar1) >= ID_AA64ISAR1_APA_PAC ||
|
||||
ID_AA64ISAR1_API(cpu_id_aa64isar1) >= ID_AA64ISAR1_API_PAC) {
|
||||
sctlr = READ_SPECIALREG(sctlr_el1);
|
||||
sctlr |= SCTLR_EnIA | SCTLR_EnDA;
|
||||
sctlr |= SCTLR_EnIB | SCTLR_EnDB;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: pmap.c,v 1.106 2025/01/18 16:35:30 kettenis Exp $ */
|
||||
/* $OpenBSD: pmap.c,v 1.107 2025/01/25 12:29:35 kettenis Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2008-2009,2014-2016 Dale Rahn <drahn@dalerahn.com>
|
||||
*
|
||||
|
@ -2316,8 +2316,8 @@ __attribute__((target("+pauth")))
|
|||
void
|
||||
pmap_setpauthkeys(struct pmap *pm)
|
||||
{
|
||||
if (ID_AA64ISAR1_APA(cpu_id_aa64isar1) >= ID_AA64ISAR1_APA_BASE ||
|
||||
ID_AA64ISAR1_API(cpu_id_aa64isar1) >= ID_AA64ISAR1_API_BASE) {
|
||||
if (ID_AA64ISAR1_APA(cpu_id_aa64isar1) >= ID_AA64ISAR1_APA_PAC ||
|
||||
ID_AA64ISAR1_API(cpu_id_aa64isar1) >= ID_AA64ISAR1_API_PAC) {
|
||||
__asm volatile ("msr apiakeylo_el1, %0"
|
||||
:: "r"(pm->pm_apiakey[0]));
|
||||
__asm volatile ("msr apiakeyhi_el1, %0"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: agintc.c,v 1.61 2024/12/07 21:12:22 patrick Exp $ */
|
||||
/* $OpenBSD: agintc.c,v 1.62 2025/01/24 20:17:28 kettenis Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2007, 2009, 2011, 2017 Dale Rahn <drahn@dalerahn.com>
|
||||
* Copyright (c) 2018 Mark Kettenis <kettenis@openbsd.org>
|
||||
|
@ -163,7 +163,7 @@ struct agintc_softc {
|
|||
bus_space_tag_t sc_iot;
|
||||
bus_space_handle_t sc_d_ioh;
|
||||
bus_space_handle_t *sc_r_ioh;
|
||||
bus_space_handle_t sc_redist_base;
|
||||
bus_space_handle_t *sc_rbase_ioh;
|
||||
bus_dma_tag_t sc_dmat;
|
||||
uint16_t *sc_processor;
|
||||
int sc_cpuremap[MAXCPUS];
|
||||
|
@ -178,6 +178,7 @@ struct agintc_softc {
|
|||
struct evcount sc_spur;
|
||||
int sc_ncells;
|
||||
int sc_num_redist;
|
||||
int sc_num_redist_regions;
|
||||
struct agintc_dmamem *sc_prop;
|
||||
struct agintc_dmamem *sc_pend;
|
||||
struct interrupt_controller sc_ic;
|
||||
|
@ -314,7 +315,7 @@ agintc_attach(struct device *parent, struct device *self, void *aux)
|
|||
uint32_t affinity;
|
||||
uint64_t redist_stride;
|
||||
int i, nbits, nintr;
|
||||
int offset, nredist;
|
||||
int idx, offset, nredist;
|
||||
#ifdef MULTIPROCESSOR
|
||||
int nipi, ipiirq[3];
|
||||
#endif
|
||||
|
@ -325,15 +326,23 @@ agintc_attach(struct device *parent, struct device *self, void *aux)
|
|||
sc->sc_iot = faa->fa_iot;
|
||||
sc->sc_dmat = faa->fa_dmat;
|
||||
|
||||
/* First row: distributor */
|
||||
sc->sc_num_redist_regions =
|
||||
OF_getpropint(faa->fa_node, "#redistributor-regions", 1);
|
||||
|
||||
if (faa->fa_nreg < sc->sc_num_redist_regions + 1)
|
||||
panic("%s: missing registers", __func__);
|
||||
|
||||
if (bus_space_map(sc->sc_iot, faa->fa_reg[0].addr,
|
||||
faa->fa_reg[0].size, 0, &sc->sc_d_ioh))
|
||||
panic("%s: ICD bus_space_map failed!", __func__);
|
||||
panic("%s: GICD bus_space_map failed", __func__);
|
||||
|
||||
/* Second row: redistributor */
|
||||
if (bus_space_map(sc->sc_iot, faa->fa_reg[1].addr,
|
||||
faa->fa_reg[1].size, 0, &sc->sc_redist_base))
|
||||
panic("%s: ICP bus_space_map failed!", __func__);
|
||||
sc->sc_rbase_ioh = mallocarray(sc->sc_num_redist_regions,
|
||||
sizeof(*sc->sc_rbase_ioh), M_DEVBUF, M_WAITOK);
|
||||
for (idx = 0; idx < sc->sc_num_redist_regions; idx++) {
|
||||
if (bus_space_map(sc->sc_iot, faa->fa_reg[1 + idx].addr,
|
||||
faa->fa_reg[1 + idx].size, 0, &sc->sc_rbase_ioh[idx]))
|
||||
panic("%s: GICR bus_space_map failed", __func__);
|
||||
}
|
||||
|
||||
typer = bus_space_read_4(sc->sc_iot, sc->sc_d_ioh, GICD_TYPER);
|
||||
|
||||
|
@ -434,13 +443,14 @@ agintc_attach(struct device *parent, struct device *self, void *aux)
|
|||
agintc_sc = sc; /* save this for global access */
|
||||
|
||||
/* find the redistributors. */
|
||||
idx = 0;
|
||||
offset = 0;
|
||||
redist_stride = OF_getpropint64(faa->fa_node, "redistributor-stride", 0);
|
||||
for (nredist = 0; ; nredist++) {
|
||||
for (nredist = 0; idx < sc->sc_num_redist_regions; nredist++) {
|
||||
uint64_t typer;
|
||||
int32_t sz;
|
||||
|
||||
typer = bus_space_read_8(sc->sc_iot, sc->sc_redist_base,
|
||||
typer = bus_space_read_8(sc->sc_iot, sc->sc_rbase_ioh[idx],
|
||||
offset + GICR_TYPER);
|
||||
|
||||
if (redist_stride == 0) {
|
||||
|
@ -455,13 +465,14 @@ agintc_attach(struct device *parent, struct device *self, void *aux)
|
|||
#endif
|
||||
|
||||
offset += sz;
|
||||
|
||||
if (typer & GICR_TYPER_LAST) {
|
||||
sc->sc_num_redist = nredist + 1;
|
||||
break;
|
||||
if (offset >= faa->fa_reg[1 + idx].size ||
|
||||
typer & GICR_TYPER_LAST) {
|
||||
offset = 0;
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
|
||||
sc->sc_num_redist = nredist;
|
||||
printf(" nirq %d nredist %d", nintr, sc->sc_num_redist);
|
||||
|
||||
sc->sc_r_ioh = mallocarray(sc->sc_num_redist,
|
||||
|
@ -470,12 +481,13 @@ agintc_attach(struct device *parent, struct device *self, void *aux)
|
|||
sizeof(*sc->sc_processor), M_DEVBUF, M_WAITOK);
|
||||
|
||||
/* submap and configure the redistributors. */
|
||||
idx = 0;
|
||||
offset = 0;
|
||||
for (nredist = 0; nredist < sc->sc_num_redist; nredist++) {
|
||||
uint64_t typer;
|
||||
int32_t sz;
|
||||
|
||||
typer = bus_space_read_8(sc->sc_iot, sc->sc_redist_base,
|
||||
typer = bus_space_read_8(sc->sc_iot, sc->sc_rbase_ioh[idx],
|
||||
offset + GICR_TYPER);
|
||||
|
||||
if (redist_stride == 0) {
|
||||
|
@ -486,7 +498,7 @@ agintc_attach(struct device *parent, struct device *self, void *aux)
|
|||
sz = redist_stride;
|
||||
|
||||
affinity = bus_space_read_8(sc->sc_iot,
|
||||
sc->sc_redist_base, offset + GICR_TYPER) >> 32;
|
||||
sc->sc_rbase_ioh[idx], offset + GICR_TYPER) >> 32;
|
||||
CPU_INFO_FOREACH(cii, ci) {
|
||||
if (affinity == (((ci->ci_mpidr >> 8) & 0xff000000) |
|
||||
(ci->ci_mpidr & 0x00ffffff)))
|
||||
|
@ -496,27 +508,32 @@ agintc_attach(struct device *parent, struct device *self, void *aux)
|
|||
sc->sc_cpuremap[ci->ci_cpuid] = nredist;
|
||||
|
||||
sc->sc_processor[nredist] = bus_space_read_8(sc->sc_iot,
|
||||
sc->sc_redist_base, offset + GICR_TYPER) >> 8;
|
||||
sc->sc_rbase_ioh[idx], offset + GICR_TYPER) >> 8;
|
||||
|
||||
bus_space_subregion(sc->sc_iot, sc->sc_redist_base,
|
||||
bus_space_subregion(sc->sc_iot, sc->sc_rbase_ioh[idx],
|
||||
offset, sz, &sc->sc_r_ioh[nredist]);
|
||||
|
||||
if (sc->sc_nlpi > 0) {
|
||||
bus_space_write_8(sc->sc_iot, sc->sc_redist_base,
|
||||
bus_space_write_8(sc->sc_iot, sc->sc_rbase_ioh[idx],
|
||||
offset + GICR_PROPBASER,
|
||||
AGINTC_DMA_DVA(sc->sc_prop) |
|
||||
GICR_PROPBASER_ISH | GICR_PROPBASER_IC_NORM_NC |
|
||||
fls(LPI_BASE + sc->sc_nlpi - 1) - 1);
|
||||
bus_space_write_8(sc->sc_iot, sc->sc_redist_base,
|
||||
bus_space_write_8(sc->sc_iot, sc->sc_rbase_ioh[idx],
|
||||
offset + GICR_PENDBASER,
|
||||
AGINTC_DMA_DVA(sc->sc_pend) |
|
||||
GICR_PENDBASER_ISH | GICR_PENDBASER_IC_NORM_NC |
|
||||
GICR_PENDBASER_PTZ);
|
||||
bus_space_write_4(sc->sc_iot, sc->sc_redist_base,
|
||||
bus_space_write_4(sc->sc_iot, sc->sc_rbase_ioh[idx],
|
||||
offset + GICR_CTLR, GICR_CTLR_ENABLE_LPIS);
|
||||
}
|
||||
|
||||
offset += sz;
|
||||
if (offset >= faa->fa_reg[1 + idx].size ||
|
||||
typer & GICR_TYPER_LAST) {
|
||||
offset = 0;
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Disable all interrupts, clear all pending */
|
||||
|
@ -696,7 +713,13 @@ unmap:
|
|||
if (sc->sc_prop)
|
||||
agintc_dmamem_free(sc->sc_dmat, sc->sc_prop);
|
||||
|
||||
bus_space_unmap(sc->sc_iot, sc->sc_redist_base, faa->fa_reg[1].size);
|
||||
for (idx = 0; idx < sc->sc_num_redist_regions; idx++) {
|
||||
bus_space_unmap(sc->sc_iot, sc->sc_rbase_ioh[idx],
|
||||
faa->fa_reg[1 + idx].size);
|
||||
}
|
||||
free(sc->sc_rbase_ioh, M_DEVBUF,
|
||||
sc->sc_num_redist_regions * sizeof(*sc->sc_rbase_ioh));
|
||||
|
||||
bus_space_unmap(sc->sc_iot, sc->sc_d_ioh, faa->fa_reg[0].size);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: armreg.h,v 1.39 2024/11/08 04:40:34 jsg Exp $ */
|
||||
/* $OpenBSD: armreg.h,v 1.40 2025/01/25 12:29:35 kettenis Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2013, 2014 Andrew Turner
|
||||
* Copyright (c) 2015 The FreeBSD Foundation
|
||||
|
@ -368,14 +368,20 @@
|
|||
#define ID_AA64ISAR1_APA_MASK (0xfULL << ID_AA64ISAR1_APA_SHIFT)
|
||||
#define ID_AA64ISAR1_APA(x) ((x) & ID_AA64ISAR1_APA_MASK)
|
||||
#define ID_AA64ISAR1_APA_NONE (0x0ULL << ID_AA64ISAR1_APA_SHIFT)
|
||||
#define ID_AA64ISAR1_APA_BASE (0x1ULL << ID_AA64ISAR1_APA_SHIFT)
|
||||
#define ID_AA64ISAR1_APA_PAC (0x2ULL << ID_AA64ISAR1_APA_SHIFT)
|
||||
#define ID_AA64ISAR1_APA_PAC (0x1ULL << ID_AA64ISAR1_APA_SHIFT)
|
||||
#define ID_AA64ISAR1_APA_EPAC (0x2ULL << ID_AA64ISAR1_APA_SHIFT)
|
||||
#define ID_AA64ISAR1_APA_EPAC2 (0x3ULL << ID_AA64ISAR1_APA_SHIFT)
|
||||
#define ID_AA64ISAR1_APA_FPAC (0x4ULL << ID_AA64ISAR1_APA_SHIFT)
|
||||
#define ID_AA64ISAR1_APA_FPAC_COMBINED (0x5ULL << ID_AA64ISAR1_APA_SHIFT)
|
||||
#define ID_AA64ISAR1_API_SHIFT 8
|
||||
#define ID_AA64ISAR1_API_MASK (0xfULL << ID_AA64ISAR1_API_SHIFT)
|
||||
#define ID_AA64ISAR1_API(x) ((x) & ID_AA64ISAR1_API_MASK)
|
||||
#define ID_AA64ISAR1_API_NONE (0x0ULL << ID_AA64ISAR1_API_SHIFT)
|
||||
#define ID_AA64ISAR1_API_BASE (0x1ULL << ID_AA64ISAR1_API_SHIFT)
|
||||
#define ID_AA64ISAR1_API_PAC (0x2ULL << ID_AA64ISAR1_API_SHIFT)
|
||||
#define ID_AA64ISAR1_API_PAC (0x1ULL << ID_AA64ISAR1_API_SHIFT)
|
||||
#define ID_AA64ISAR1_API_EPAC (0x2ULL << ID_AA64ISAR1_API_SHIFT)
|
||||
#define ID_AA64ISAR1_API_EPAC2 (0x3ULL << ID_AA64ISAR1_API_SHIFT)
|
||||
#define ID_AA64ISAR1_API_FPAC (0x4ULL << ID_AA64ISAR1_API_SHIFT)
|
||||
#define ID_AA64ISAR1_API_FPAC_COMBINED (0x5ULL << ID_AA64ISAR1_API_SHIFT)
|
||||
#define ID_AA64ISAR1_JSCVT_SHIFT 12
|
||||
#define ID_AA64ISAR1_JSCVT_MASK (0xfULL << ID_AA64ISAR1_JSCVT_SHIFT)
|
||||
#define ID_AA64ISAR1_JSCVT(x) ((x) & ID_AA64ISAR1_JSCVT_MASK)
|
||||
|
@ -458,6 +464,22 @@
|
|||
#define ID_AA64ISAR2_RPRES(x) ((x) & ID_AA64ISAR2_RPRES_MASK)
|
||||
#define ID_AA64ISAR2_RPRES_NONE (0x0ULL << ID_AA64ISAR2_RPRES_SHIFT)
|
||||
#define ID_AA64ISAR2_RPRES_IMPL (0x1ULL << ID_AA64ISAR2_RPRES_SHIFT)
|
||||
#define ID_AA64ISAR2_GPA3_SHIFT 8
|
||||
#define ID_AA64ISAR2_GPA3_WIDTH 4
|
||||
#define ID_AA64ISAR2_GPA3_MASK (0xfULL << ID_AA64ISAR2_GPA3_SHIFT)
|
||||
#define ID_AA64ISAR2_GPA3(x) ((x) & ID_AA64ISAR2_GPA3_MASK)
|
||||
#define ID_AA64ISAR2_GPA3_NONE (0x0ULL << ID_AA64ISAR2_GPA3_SHIFT)
|
||||
#define ID_AA64ISAR2_GPA3_IMPL (0x1ULL << ID_AA64ISAR2_GPA3_SHIFT)
|
||||
#define ID_AA64ISAR2_APA3_SHIFT 12
|
||||
#define ID_AA64ISAR2_APA3_WIDTH 4
|
||||
#define ID_AA64ISAR2_APA3_MASK (0xfULL << ID_AA64ISAR2_APA3_SHIFT)
|
||||
#define ID_AA64ISAR2_APA3(x) ((x) & ID_AA64ISAR2_APA3_MASK)
|
||||
#define ID_AA64ISAR2_APA3_NONE (0x0ULL << ID_AA64ISAR2_APA3_SHIFT)
|
||||
#define ID_AA64ISAR2_APA3_PAC (0x1ULL << ID_AA64ISAR2_APA3_SHIFT)
|
||||
#define ID_AA64ISAR2_APA3_EPAC (0x2ULL << ID_AA64ISAR2_APA3_SHIFT)
|
||||
#define ID_AA64ISAR2_APA3_EPAC2 (0x3ULL << ID_AA64ISAR2_APA3_SHIFT)
|
||||
#define ID_AA64ISAR2_APA3_FPAC (0x4ULL << ID_AA64ISAR2_APA3_SHIFT)
|
||||
#define ID_AA64ISAR2_APA3_FPAC_COMBINED (0x5ULL << ID_AA64ISAR2_APA3_SHIFT)
|
||||
#define ID_AA64ISAR2_MOPS_SHIFT 16
|
||||
#define ID_AA64ISAR2_MOPS_MASK (0xfULL << ID_AA64ISAR2_MOPS_SHIFT)
|
||||
#define ID_AA64ISAR2_MOPS(x) ((x) & ID_AA64ISAR2_MOPS_MASK)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: kern_exec.c,v 1.259 2024/09/30 11:49:44 claudio Exp $ */
|
||||
/* $OpenBSD: kern_exec.c,v 1.260 2025/01/25 19:21:40 claudio Exp $ */
|
||||
/* $NetBSD: kern_exec.c,v 1.75 1996/02/09 18:59:28 christos Exp $ */
|
||||
|
||||
/*-
|
||||
|
@ -748,7 +748,7 @@ sys_execve(struct proc *p, void *v, register_t *retval)
|
|||
atomic_clearbits_int(&p->p_p->ps_flags, PS_WXNEEDED);
|
||||
|
||||
atomic_clearbits_int(&pr->ps_flags, PS_INEXEC);
|
||||
single_thread_clear(p, P_SUSPSIG);
|
||||
single_thread_clear(p);
|
||||
|
||||
/* setregs() sets up all the registers, so just 'return' */
|
||||
return EJUSTRETURN;
|
||||
|
@ -775,7 +775,7 @@ bad:
|
|||
freehdr:
|
||||
free(pack.ep_hdr, M_EXEC, pack.ep_hdrlen);
|
||||
atomic_clearbits_int(&pr->ps_flags, PS_INEXEC);
|
||||
single_thread_clear(p, P_SUSPSIG);
|
||||
single_thread_clear(p);
|
||||
|
||||
return (error);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: kern_sig.c,v 1.357 2025/01/22 16:13:09 claudio Exp $ */
|
||||
/* $OpenBSD: kern_sig.c,v 1.359 2025/01/25 19:21:40 claudio Exp $ */
|
||||
/* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -125,7 +125,7 @@ void proc_stop(struct proc *p, int);
|
|||
void proc_stop_sweep(void *);
|
||||
void *proc_stop_si;
|
||||
|
||||
void process_continue(struct proc *, int);
|
||||
void process_continue(struct process *, int);
|
||||
|
||||
void setsigctx(struct proc *, int, struct sigctx *);
|
||||
void postsig_done(struct proc *, int, sigset_t, int);
|
||||
|
@ -1119,7 +1119,7 @@ ptsignal_locked(struct proc *p, int signum, enum signal_type type)
|
|||
unsleep(p);
|
||||
}
|
||||
|
||||
process_continue(p, P_SUSPSIG);
|
||||
process_continue(pr, P_SUSPSIG);
|
||||
wakeparent = 1;
|
||||
goto out;
|
||||
}
|
||||
|
@ -1509,26 +1509,25 @@ proc_trap(struct proc *p, int signum)
|
|||
signum = pr->ps_xsig;
|
||||
pr->ps_xsig = 0;
|
||||
if ((p->p_flag & P_TRACESINGLE) == 0)
|
||||
single_thread_clear(p, 0);
|
||||
single_thread_clear(p);
|
||||
atomic_clearbits_int(&p->p_flag, P_TRACESINGLE);
|
||||
|
||||
return signum;
|
||||
}
|
||||
|
||||
/*
|
||||
* Continue all threads of a process that were stopped because of `flag'."
|
||||
* Continue all threads of a process that were stopped because of `flag'.
|
||||
*/
|
||||
void
|
||||
process_continue(struct proc *p, int flag)
|
||||
process_continue(struct process *pr, int flag)
|
||||
{
|
||||
struct process *pr = p->p_p;
|
||||
struct proc *q;
|
||||
struct proc *q, *p = NULL;
|
||||
|
||||
MUTEX_ASSERT_LOCKED(&pr->ps_mtx);
|
||||
|
||||
/* wake all if called from a different process */
|
||||
if (curproc != p)
|
||||
p = NULL;
|
||||
/* skip curproc if it is part of pr */
|
||||
if (curproc->p_p == pr)
|
||||
p = curproc;
|
||||
|
||||
TAILQ_FOREACH(q, &pr->ps_threads, p_thr_link) {
|
||||
if (q == p)
|
||||
|
@ -1537,20 +1536,27 @@ process_continue(struct proc *p, int flag)
|
|||
continue;
|
||||
atomic_clearbits_int(&q->p_flag, flag);
|
||||
|
||||
/*
|
||||
* clearing either makes the thread runnable or puts
|
||||
* it back into some sleep queue
|
||||
*/
|
||||
/*
|
||||
* XXX in ptsignal the SCHED_LOCK is already held so we can't
|
||||
* grab it here until that is fixed.
|
||||
*/
|
||||
/* XXX SCHED_LOCK(); */
|
||||
SCHED_ASSERT_LOCKED();
|
||||
if (q->p_wchan == NULL)
|
||||
setrunnable(q);
|
||||
else
|
||||
q->p_stat = SSLEEP;
|
||||
/*
|
||||
* Stopping a process is not an atomic operation so
|
||||
* it is possible that some threads are not stopped
|
||||
* when process_continue is called. These threads
|
||||
* need to be skipped.
|
||||
*
|
||||
* Clearing either makes the thread runnable or puts
|
||||
* it back into some sleep queue.
|
||||
*/
|
||||
if (q->p_stat == SSTOP) {
|
||||
if (q->p_wchan == NULL)
|
||||
setrunnable(q);
|
||||
else
|
||||
q->p_stat = SSLEEP;
|
||||
}
|
||||
/* XXX SCHED_UNLOCK(); */
|
||||
}
|
||||
}
|
||||
|
@ -2288,7 +2294,7 @@ single_thread_wait(struct process *pr, int recheck)
|
|||
}
|
||||
|
||||
void
|
||||
single_thread_clear(struct proc *p, int flag)
|
||||
single_thread_clear(struct proc *p)
|
||||
{
|
||||
struct process *pr = p->p_p;
|
||||
|
||||
|
@ -2300,7 +2306,7 @@ single_thread_clear(struct proc *p, int flag)
|
|||
atomic_clearbits_int(&pr->ps_flags, PS_SINGLEUNWIND | PS_SINGLEEXIT);
|
||||
|
||||
SCHED_LOCK();
|
||||
process_continue(p, P_SUSPSINGLE);
|
||||
process_continue(pr, P_SUSPSINGLE);
|
||||
SCHED_UNLOCK();
|
||||
|
||||
mtx_leave(&pr->ps_mtx);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: subr_hibernate.c,v 1.151 2025/01/13 17:50:54 krw Exp $ */
|
||||
/* $OpenBSD: subr_hibernate.c,v 1.152 2025/01/24 18:13:29 krw Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2011 Ariane van der Steldt <ariane@stack.nl>
|
||||
|
@ -99,8 +99,6 @@ int hib_debug = 99;
|
|||
#define DNPRINTF(n,x...)
|
||||
#endif
|
||||
|
||||
#define ROUNDUP(_x, _y) ((((_x)+(_y)-1)/(_y))*(_y))
|
||||
|
||||
#ifndef NO_PROPOLICE
|
||||
extern long __guard_local;
|
||||
#endif /* ! NO_PROPOLICE */
|
||||
|
@ -1609,7 +1607,7 @@ hibernate_write_chunks(union hibernate_info *hib)
|
|||
out_remaining = hibernate_state->hib_stream.avail_out;
|
||||
|
||||
/* Round up to next sector if needed */
|
||||
used = ROUNDUP(2 * PAGE_SIZE - out_remaining, hib->sec_size);
|
||||
used = roundup(2 * PAGE_SIZE - out_remaining, hib->sec_size);
|
||||
|
||||
/* Write final block(s) for this chunk */
|
||||
if ((err = hibernate_write(hib, blkctr,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: uipc_socket2.c,v 1.168 2025/01/22 15:05:49 mvs Exp $ */
|
||||
/* $OpenBSD: uipc_socket2.c,v 1.169 2025/01/25 22:06:41 bluhm Exp $ */
|
||||
/* $NetBSD: uipc_socket2.c,v 1.11 1996/02/04 02:17:55 christos Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -237,8 +237,6 @@ sonewconn(struct socket *head, int connstatus, int wait)
|
|||
wakeup(&head->so_timeo);
|
||||
}
|
||||
|
||||
sounlock_nonet(so);
|
||||
|
||||
return (so);
|
||||
|
||||
fail:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: uipc_usrreq.c,v 1.213 2025/01/20 16:34:48 bluhm Exp $ */
|
||||
/* $OpenBSD: uipc_usrreq.c,v 1.214 2025/01/25 22:06:41 bluhm Exp $ */
|
||||
/* $NetBSD: uipc_usrreq.c,v 1.18 1996/02/09 19:00:50 christos Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -890,18 +890,17 @@ unp_connect(struct socket *so, struct mbuf *nam, struct proc *p)
|
|||
|
||||
if ((so2->so_options & SO_ACCEPTCONN) == 0 ||
|
||||
(so3 = sonewconn(so2, 0, M_WAIT)) == NULL) {
|
||||
sounlock(so2);
|
||||
error = ECONNREFUSED;
|
||||
}
|
||||
|
||||
sounlock(so2);
|
||||
|
||||
if (error != 0)
|
||||
goto put;
|
||||
}
|
||||
|
||||
/*
|
||||
* Since `so2' is protected by vnode(9) lock, `so3'
|
||||
* can't be PRU_ABORT'ed here.
|
||||
*/
|
||||
sounlock(so2);
|
||||
sounlock(so3);
|
||||
solock_pair(so, so3);
|
||||
|
||||
unp2 = sotounpcb(so2);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: if.c,v 1.724 2025/01/24 09:19:07 mvs Exp $ */
|
||||
/* $OpenBSD: if.c,v 1.725 2025/01/25 10:53:36 mvs Exp $ */
|
||||
/* $NetBSD: if.c,v 1.35 1996/05/07 05:26:04 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -3195,7 +3195,7 @@ if_getgrouplist(caddr_t data)
|
|||
NET_LOCK_SHARED();
|
||||
TAILQ_FOREACH(ifg, &ifg_head, ifg_next)
|
||||
ifgr->ifgr_len += sizeof(ifgrq);
|
||||
NET_LOCK_SHARED();
|
||||
NET_UNLOCK_SHARED();
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
|
177
sys/net/if_wg.c
177
sys/net/if_wg.c
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: if_wg.c,v 1.39 2024/10/31 12:33:11 claudio Exp $ */
|
||||
/* $OpenBSD: if_wg.c,v 1.40 2025/01/25 14:51:34 mvs Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015-2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
||||
|
@ -30,6 +30,7 @@
|
|||
#include <sys/percpu.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mbuf.h>
|
||||
#include <sys/syslog.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_var.h>
|
||||
|
@ -70,8 +71,16 @@
|
|||
#define NEW_HANDSHAKE_TIMEOUT (REKEY_TIMEOUT + KEEPALIVE_TIMEOUT)
|
||||
#define UNDERLOAD_TIMEOUT 1
|
||||
|
||||
#define DPRINTF(sc, str, ...) do { if (ISSET((sc)->sc_if.if_flags, IFF_DEBUG))\
|
||||
printf("%s: " str, (sc)->sc_if.if_xname, ##__VA_ARGS__); } while (0)
|
||||
#define WGPRINTF(loglevel, sc, mtx, fmt, ...) do { \
|
||||
if (ISSET((sc)->sc_if.if_flags, IFF_DEBUG)) { \
|
||||
if (mtx) \
|
||||
mtx_enter(mtx); \
|
||||
log(loglevel, "%s: " fmt, (sc)->sc_if.if_xname, \
|
||||
##__VA_ARGS__); \
|
||||
if (mtx) \
|
||||
mtx_leave(mtx); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define CONTAINER_OF(ptr, type, member) ({ \
|
||||
const __typeof( ((type *)0)->member ) *__mptr = (ptr); \
|
||||
|
@ -448,7 +457,7 @@ wg_peer_create(struct wg_softc *sc, uint8_t public[WG_KEY_SIZE])
|
|||
sc->sc_peer_num++;
|
||||
rw_exit_write(&sc->sc_peer_lock);
|
||||
|
||||
DPRINTF(sc, "Peer %llu created\n", peer->p_id);
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Peer %llu created\n", peer->p_id);
|
||||
return peer;
|
||||
}
|
||||
|
||||
|
@ -530,7 +539,7 @@ wg_peer_destroy(struct wg_peer *peer)
|
|||
if (!mq_empty(&peer->p_stage_queue))
|
||||
mq_purge(&peer->p_stage_queue);
|
||||
|
||||
DPRINTF(sc, "Peer %llu destroyed\n", peer->p_id);
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Peer %llu destroyed\n", peer->p_id);
|
||||
explicit_bzero(peer, sizeof(*peer));
|
||||
pool_put(&wg_peer_pool, peer);
|
||||
}
|
||||
|
@ -883,7 +892,8 @@ retry:
|
|||
} else {
|
||||
ret = wg_send(sc, e, m);
|
||||
if (ret != 0)
|
||||
DPRINTF(sc, "Unable to send packet\n");
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL,
|
||||
"Unable to send packet\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1144,23 +1154,29 @@ wg_timers_run_retry_handshake(void *_t)
|
|||
{
|
||||
struct wg_timers *t = _t;
|
||||
struct wg_peer *peer = CONTAINER_OF(t, struct wg_peer, p_timers);
|
||||
char ipaddr[INET6_ADDRSTRLEN];
|
||||
|
||||
mtx_enter(&t->t_handshake_mtx);
|
||||
if (t->t_handshake_retries <= MAX_TIMER_HANDSHAKES) {
|
||||
t->t_handshake_retries++;
|
||||
mtx_leave(&t->t_handshake_mtx);
|
||||
|
||||
DPRINTF(peer->p_sc, "Handshake for peer %llu did not complete "
|
||||
"after %d seconds, retrying (try %d)\n", peer->p_id,
|
||||
WGPRINTF(LOG_INFO, peer->p_sc, &peer->p_endpoint_mtx,
|
||||
"Handshake for peer %llu (%s) did not complete after %d "
|
||||
"seconds, retrying (try %d)\n", peer->p_id,
|
||||
sockaddr_ntop(&peer->p_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)),
|
||||
REKEY_TIMEOUT, t->t_handshake_retries + 1);
|
||||
wg_peer_clear_src(peer);
|
||||
wg_timers_run_send_initiation(t, 1);
|
||||
} else {
|
||||
mtx_leave(&t->t_handshake_mtx);
|
||||
|
||||
DPRINTF(peer->p_sc, "Handshake for peer %llu did not complete "
|
||||
"after %d retries, giving up\n", peer->p_id,
|
||||
MAX_TIMER_HANDSHAKES + 2);
|
||||
WGPRINTF(LOG_INFO, peer->p_sc, &peer->p_endpoint_mtx,
|
||||
"Handshake for peer %llu (%s) did not complete after %d "
|
||||
"retries, giving up\n", peer->p_id,
|
||||
sockaddr_ntop(&peer->p_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)), MAX_TIMER_HANDSHAKES + 2);
|
||||
|
||||
timeout_del(&t->t_send_keepalive);
|
||||
mq_purge(&peer->p_stage_queue);
|
||||
|
@ -1188,10 +1204,13 @@ wg_timers_run_new_handshake(void *_t)
|
|||
{
|
||||
struct wg_timers *t = _t;
|
||||
struct wg_peer *peer = CONTAINER_OF(t, struct wg_peer, p_timers);
|
||||
char ipaddr[INET6_ADDRSTRLEN];
|
||||
|
||||
DPRINTF(peer->p_sc, "Retrying handshake with peer %llu because we "
|
||||
"stopped hearing back after %d seconds\n",
|
||||
peer->p_id, NEW_HANDSHAKE_TIMEOUT);
|
||||
WGPRINTF(LOG_INFO, peer->p_sc, &peer->p_endpoint_mtx,
|
||||
"Retrying handshake with peer %llu (%s) because we "
|
||||
"stopped hearing back after %d seconds\n", peer->p_id,
|
||||
sockaddr_ntop(&peer->p_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)), NEW_HANDSHAKE_TIMEOUT);
|
||||
wg_peer_clear_src(peer);
|
||||
|
||||
wg_timers_run_send_initiation(t, 0);
|
||||
|
@ -1202,8 +1221,12 @@ wg_timers_run_zero_key_material(void *_t)
|
|||
{
|
||||
struct wg_timers *t = _t;
|
||||
struct wg_peer *peer = CONTAINER_OF(t, struct wg_peer, p_timers);
|
||||
char ipaddr[INET6_ADDRSTRLEN];
|
||||
|
||||
DPRINTF(peer->p_sc, "Zeroing out keys for peer %llu\n", peer->p_id);
|
||||
WGPRINTF(LOG_INFO, peer->p_sc, &peer->p_endpoint_mtx, "Zeroing out "
|
||||
"keys for peer %llu (%s)\n", peer->p_id,
|
||||
sockaddr_ntop(&peer->p_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
task_add(wg_handshake_taskq, &peer->p_clear_secrets);
|
||||
}
|
||||
|
||||
|
@ -1234,12 +1257,15 @@ wg_send_initiation(void *_peer)
|
|||
{
|
||||
struct wg_peer *peer = _peer;
|
||||
struct wg_pkt_initiation pkt;
|
||||
char ipaddr[INET6_ADDRSTRLEN];
|
||||
|
||||
if (wg_timers_check_handshake_last_sent(&peer->p_timers) != ETIMEDOUT)
|
||||
return;
|
||||
|
||||
DPRINTF(peer->p_sc, "Sending handshake initiation to peer %llu\n",
|
||||
peer->p_id);
|
||||
WGPRINTF(LOG_INFO, peer->p_sc, &peer->p_endpoint_mtx, "Sending "
|
||||
"handshake initiation to peer %llu (%s)\n", peer->p_id,
|
||||
sockaddr_ntop(&peer->p_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
|
||||
if (noise_create_initiation(&peer->p_remote, &pkt.s_idx, pkt.ue, pkt.es,
|
||||
pkt.ets) != 0)
|
||||
|
@ -1255,9 +1281,12 @@ void
|
|||
wg_send_response(struct wg_peer *peer)
|
||||
{
|
||||
struct wg_pkt_response pkt;
|
||||
char ipaddr[INET6_ADDRSTRLEN];
|
||||
|
||||
DPRINTF(peer->p_sc, "Sending handshake response to peer %llu\n",
|
||||
peer->p_id);
|
||||
WGPRINTF(LOG_INFO, peer->p_sc, &peer->p_endpoint_mtx, "Sending "
|
||||
"handshake response to peer %llu (%s)\n", peer->p_id,
|
||||
sockaddr_ntop(&peer->p_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
|
||||
if (noise_create_response(&peer->p_remote, &pkt.s_idx, &pkt.r_idx,
|
||||
pkt.ue, pkt.en) != 0)
|
||||
|
@ -1278,7 +1307,8 @@ wg_send_cookie(struct wg_softc *sc, struct cookie_macs *cm, uint32_t idx,
|
|||
{
|
||||
struct wg_pkt_cookie pkt;
|
||||
|
||||
DPRINTF(sc, "Sending cookie response for denied handshake message\n");
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL, "Sending cookie response for denied "
|
||||
"handshake message\n");
|
||||
|
||||
pkt.t = WG_PKT_COOKIE;
|
||||
pkt.r_idx = idx;
|
||||
|
@ -1341,6 +1371,7 @@ wg_handshake(struct wg_softc *sc, struct mbuf *m)
|
|||
struct noise_remote *remote;
|
||||
int res, underload = 0;
|
||||
static struct timeval wg_last_underload; /* microuptime */
|
||||
char ipaddr[INET6_ADDRSTRLEN];
|
||||
|
||||
if (mq_len(&sc->sc_handshake_queue) >= MAX_QUEUED_HANDSHAKES/8) {
|
||||
getmicrouptime(&wg_last_underload);
|
||||
|
@ -1363,10 +1394,16 @@ wg_handshake(struct wg_softc *sc, struct mbuf *m)
|
|||
underload, &t->t_endpoint.e_remote.r_sa);
|
||||
|
||||
if (res == EINVAL) {
|
||||
DPRINTF(sc, "Invalid initiation MAC\n");
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Invalid initiation "
|
||||
"MAC from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
goto error;
|
||||
} else if (res == ECONNREFUSED) {
|
||||
DPRINTF(sc, "Handshake ratelimited\n");
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL, "Handshake "
|
||||
"ratelimited from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
goto error;
|
||||
} else if (res == EAGAIN) {
|
||||
wg_send_cookie(sc, &init->m, init->s_idx,
|
||||
|
@ -1378,14 +1415,19 @@ wg_handshake(struct wg_softc *sc, struct mbuf *m)
|
|||
|
||||
if (noise_consume_initiation(&sc->sc_local, &remote,
|
||||
init->s_idx, init->ue, init->es, init->ets) != 0) {
|
||||
DPRINTF(sc, "Invalid handshake initiation\n");
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Invalid handshake "
|
||||
"initiation from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
goto error;
|
||||
}
|
||||
|
||||
peer = CONTAINER_OF(remote, struct wg_peer, p_remote);
|
||||
|
||||
DPRINTF(sc, "Receiving handshake initiation from peer %llu\n",
|
||||
peer->p_id);
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Receiving handshake initiation "
|
||||
"from peer %llu (%s)\n", peer->p_id,
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
|
||||
wg_peer_counters_add(peer, 0, sizeof(*init));
|
||||
wg_peer_set_endpoint_from_tag(peer, t);
|
||||
|
@ -1399,10 +1441,16 @@ wg_handshake(struct wg_softc *sc, struct mbuf *m)
|
|||
underload, &t->t_endpoint.e_remote.r_sa);
|
||||
|
||||
if (res == EINVAL) {
|
||||
DPRINTF(sc, "Invalid response MAC\n");
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Invalid response "
|
||||
"MAC from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
goto error;
|
||||
} else if (res == ECONNREFUSED) {
|
||||
DPRINTF(sc, "Handshake ratelimited\n");
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL, "Handshake "
|
||||
"ratelimited from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
goto error;
|
||||
} else if (res == EAGAIN) {
|
||||
wg_send_cookie(sc, &resp->m, resp->s_idx,
|
||||
|
@ -1413,7 +1461,10 @@ wg_handshake(struct wg_softc *sc, struct mbuf *m)
|
|||
}
|
||||
|
||||
if ((remote = wg_index_get(sc, resp->r_idx)) == NULL) {
|
||||
DPRINTF(sc, "Unknown handshake response\n");
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Unknown "
|
||||
"handshake response from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -1421,12 +1472,17 @@ wg_handshake(struct wg_softc *sc, struct mbuf *m)
|
|||
|
||||
if (noise_consume_response(remote, resp->s_idx, resp->r_idx,
|
||||
resp->ue, resp->en) != 0) {
|
||||
DPRINTF(sc, "Invalid handshake response\n");
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Invalid handshake "
|
||||
"response from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
goto error;
|
||||
}
|
||||
|
||||
DPRINTF(sc, "Receiving handshake response from peer %llu\n",
|
||||
peer->p_id);
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Receiving handshake response "
|
||||
"from peer %llu (%s)\n", peer->p_id,
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
|
||||
wg_peer_counters_add(peer, 0, sizeof(*resp));
|
||||
wg_peer_set_endpoint_from_tag(peer, t);
|
||||
|
@ -1439,7 +1495,10 @@ wg_handshake(struct wg_softc *sc, struct mbuf *m)
|
|||
cook = mtod(m, struct wg_pkt_cookie *);
|
||||
|
||||
if ((remote = wg_index_get(sc, cook->r_idx)) == NULL) {
|
||||
DPRINTF(sc, "Unknown cookie index\n");
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL, "Unknown cookie "
|
||||
"index from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -1447,11 +1506,17 @@ wg_handshake(struct wg_softc *sc, struct mbuf *m)
|
|||
|
||||
if (cookie_maker_consume_payload(&peer->p_cookie,
|
||||
cook->nonce, cook->ec) != 0) {
|
||||
DPRINTF(sc, "Could not decrypt cookie response\n");
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL, "Could not decrypt "
|
||||
"cookie response from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
goto error;
|
||||
}
|
||||
|
||||
DPRINTF(sc, "Receiving cookie response\n");
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL, "Receiving cookie response "
|
||||
"from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
goto error;
|
||||
default:
|
||||
panic("invalid packet in handshake queue");
|
||||
|
@ -1505,6 +1570,7 @@ wg_encap(struct wg_softc *sc, struct mbuf *m)
|
|||
struct mbuf *mc;
|
||||
size_t padding_len, plaintext_len, out_len;
|
||||
uint64_t nonce;
|
||||
char ipaddr[INET6_ADDRSTRLEN];
|
||||
|
||||
t = wg_tag_get(m);
|
||||
peer = t->t_peer;
|
||||
|
@ -1558,8 +1624,10 @@ wg_encap(struct wg_softc *sc, struct mbuf *m)
|
|||
|
||||
/* A packet with length 0 is a keepalive packet */
|
||||
if (__predict_false(m->m_pkthdr.len == 0))
|
||||
DPRINTF(sc, "Sending keepalive packet to peer %llu\n",
|
||||
peer->p_id);
|
||||
WGPRINTF(LOG_DEBUG, sc, &peer->p_endpoint_mtx, "Sending "
|
||||
"keepalive packet to peer %llu (%s)\n", peer->p_id,
|
||||
sockaddr_ntop(&peer->p_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
|
||||
mc->m_pkthdr.ph_loopcnt = m->m_pkthdr.ph_loopcnt;
|
||||
mc->m_flags &= ~(M_MCAST | M_BCAST);
|
||||
|
@ -1590,6 +1658,7 @@ wg_decap(struct wg_softc *sc, struct mbuf *m)
|
|||
struct wg_tag *t;
|
||||
size_t payload_len;
|
||||
uint64_t nonce;
|
||||
char ipaddr[INET6_ADDRSTRLEN];
|
||||
|
||||
t = wg_tag_get(m);
|
||||
peer = t->t_peer;
|
||||
|
@ -1631,8 +1700,10 @@ wg_decap(struct wg_softc *sc, struct mbuf *m)
|
|||
|
||||
/* A packet with length 0 is a keepalive packet */
|
||||
if (__predict_false(m->m_pkthdr.len == 0)) {
|
||||
DPRINTF(sc, "Receiving keepalive packet from peer "
|
||||
"%llu\n", peer->p_id);
|
||||
WGPRINTF(LOG_DEBUG, sc, &peer->p_endpoint_mtx, "Receiving "
|
||||
"keepalive packet from peer %llu (%s)\n", peer->p_id,
|
||||
sockaddr_ntop(&peer->p_endpoint.e_remote.r_sa,
|
||||
ipaddr, sizeof(ipaddr)));
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -1670,14 +1741,18 @@ wg_decap(struct wg_softc *sc, struct mbuf *m)
|
|||
allowed_peer = wg_aip_lookup(sc->sc_aip6, &ip6->ip6_src);
|
||||
#endif
|
||||
} else {
|
||||
DPRINTF(sc, "Packet is neither ipv4 nor ipv6 from "
|
||||
"peer %llu\n", peer->p_id);
|
||||
WGPRINTF(LOG_WARNING, sc, &peer->p_endpoint_mtx, "Packet "
|
||||
"is neither IPv4 nor IPv6 from peer %llu (%s)\n",
|
||||
peer->p_id, sockaddr_ntop(&peer->p_endpoint.e_remote.r_sa,
|
||||
ipaddr, sizeof(ipaddr)));
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (__predict_false(peer != allowed_peer)) {
|
||||
DPRINTF(sc, "Packet has unallowed src IP from peer "
|
||||
"%llu\n", peer->p_id);
|
||||
WGPRINTF(LOG_WARNING, sc, &peer->p_endpoint_mtx, "Packet "
|
||||
"has unallowed source IP from peer %llu (%s)\n",
|
||||
peer->p_id, sockaddr_ntop(&peer->p_endpoint.e_remote.r_sa,
|
||||
ipaddr, sizeof(ipaddr)));
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -2012,6 +2087,7 @@ wg_input(void *_sc, struct mbuf *m, struct ip *ip, struct ip6_hdr *ip6,
|
|||
struct wg_tag *t;
|
||||
struct wg_softc *sc = _sc;
|
||||
struct udphdr *uh = _uh;
|
||||
char ipaddr[INET6_ADDRSTRLEN];
|
||||
|
||||
NET_ASSERT_LOCKED();
|
||||
|
||||
|
@ -2059,7 +2135,10 @@ wg_input(void *_sc, struct mbuf *m, struct ip *ip, struct ip6_hdr *ip6,
|
|||
*mtod(m, uint32_t *) == WG_PKT_COOKIE)) {
|
||||
|
||||
if (mq_enqueue(&sc->sc_handshake_queue, m) != 0)
|
||||
DPRINTF(sc, "Dropping handshake packet\n");
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL, "Dropping handshake"
|
||||
"packet from %s\n",
|
||||
sockaddr_ntop(&t->t_endpoint.e_remote.r_sa, ipaddr,
|
||||
sizeof(ipaddr)));
|
||||
task_add(wg_handshake_taskq, &sc->sc_handshake);
|
||||
|
||||
} else if (m->m_pkthdr.len >= sizeof(struct wg_pkt_data) +
|
||||
|
@ -2169,14 +2248,14 @@ wg_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *sa,
|
|||
|
||||
af = peer->p_endpoint.e_remote.r_sa.sa_family;
|
||||
if (af != AF_INET && af != AF_INET6) {
|
||||
DPRINTF(sc, "No valid endpoint has been configured or "
|
||||
"discovered for peer %llu\n", peer->p_id);
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL, "No valid endpoint has been "
|
||||
"configured or discovered for peer %llu\n", peer->p_id);
|
||||
ret = EDESTADDRREQ;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (m->m_pkthdr.ph_loopcnt++ > M_MAXLOOP) {
|
||||
DPRINTF(sc, "Packet looped\n");
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL, "Packet looped\n");
|
||||
ret = ELOOP;
|
||||
goto error;
|
||||
}
|
||||
|
@ -2189,7 +2268,7 @@ wg_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *sa,
|
|||
* another aip_lookup in wg_qstart, or refcnting as mentioned before.
|
||||
*/
|
||||
if (m->m_pkthdr.pf.delay > 0) {
|
||||
DPRINTF(sc, "PF delay unsupported\n");
|
||||
WGPRINTF(LOG_DEBUG, sc, NULL, "PF delay unsupported\n");
|
||||
ret = EOPNOTSUPP;
|
||||
goto error;
|
||||
}
|
||||
|
@ -2702,7 +2781,7 @@ wg_clone_create(struct if_clone *ifc, int unit)
|
|||
bpfattach(&ifp->if_bpf, ifp, DLT_LOOP, sizeof(uint32_t));
|
||||
#endif
|
||||
|
||||
DPRINTF(sc, "Interface created\n");
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Interface created\n");
|
||||
|
||||
return 0;
|
||||
ret_05:
|
||||
|
@ -2745,7 +2824,7 @@ wg_clone_destroy(struct ifnet *ifp)
|
|||
wg_crypt_taskq = NULL;
|
||||
}
|
||||
|
||||
DPRINTF(sc, "Destroyed interface\n");
|
||||
WGPRINTF(LOG_INFO, sc, NULL, "Interface destroyed\n");
|
||||
|
||||
hashfree(sc->sc_index, HASHTABLE_INDEX_SIZE, M_DEVBUF);
|
||||
hashfree(sc->sc_peer, HASHTABLE_PEER_SIZE, M_DEVBUF);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: pipex.c,v 1.156 2024/09/27 00:38:49 yasuoka Exp $ */
|
||||
/* $OpenBSD: pipex.c,v 1.157 2025/01/25 02:06:40 yasuoka Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2009 Internet Initiative Japan Inc.
|
||||
|
@ -1507,13 +1507,19 @@ pipex_pptp_lookup_session(struct mbuf *m0)
|
|||
/* lookup pipex session table */
|
||||
id = ntohs(gre.call_id);
|
||||
session = pipex_lookup_by_session_id(PIPEX_PROTO_PPTP, id);
|
||||
#ifdef PIPEX_DEBUG
|
||||
if (session == NULL) {
|
||||
PIPEX_DBG((NULL, LOG_DEBUG,
|
||||
"<%s> session not found (id=%d)", __func__, id));
|
||||
goto not_ours;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!(session->peer.sa.sa_family == AF_INET &&
|
||||
session->peer.sin4.sin_addr.s_addr == ip.ip_src.s_addr)) {
|
||||
PIPEX_DBG((NULL, LOG_DEBUG,
|
||||
"<%s> the source address of the session is not matched",
|
||||
__func__));
|
||||
goto not_ours;
|
||||
}
|
||||
|
||||
return (session);
|
||||
|
||||
|
@ -1970,11 +1976,12 @@ drop:
|
|||
}
|
||||
|
||||
struct pipex_session *
|
||||
pipex_l2tp_lookup_session(struct mbuf *m0, int off)
|
||||
pipex_l2tp_lookup_session(struct mbuf *m0, int off, struct sockaddr *sasrc)
|
||||
{
|
||||
struct pipex_session *session;
|
||||
uint16_t flags, session_id, ver;
|
||||
u_char *cp, buf[PIPEX_L2TP_MINLEN];
|
||||
int srcmatch = 0;
|
||||
|
||||
if (m0->m_pkthdr.len < off + PIPEX_L2TP_MINLEN) {
|
||||
PIPEX_DBG((NULL, LOG_DEBUG,
|
||||
|
@ -2004,13 +2011,33 @@ pipex_l2tp_lookup_session(struct mbuf *m0, int off)
|
|||
|
||||
/* lookup pipex session table */
|
||||
session = pipex_lookup_by_session_id(PIPEX_PROTO_L2TP, session_id);
|
||||
#ifdef PIPEX_DEBUG
|
||||
if (session == NULL) {
|
||||
PIPEX_DBG((NULL, LOG_DEBUG,
|
||||
"<%s> session not found (id=%d)", __func__, session_id));
|
||||
goto not_ours;
|
||||
}
|
||||
switch (sasrc->sa_family) {
|
||||
case AF_INET:
|
||||
if (session->peer.sa.sa_family == AF_INET &&
|
||||
session->peer.sin4.sin_addr.s_addr ==
|
||||
((struct sockaddr_in *)sasrc)->sin_addr.s_addr)
|
||||
srcmatch = 1;
|
||||
break;
|
||||
#ifdef INET6
|
||||
case AF_INET6:
|
||||
if (session->peer.sa.sa_family == AF_INET6 &&
|
||||
IN6_ARE_ADDR_EQUAL(&session->peer.sin6.sin6_addr,
|
||||
&((struct sockaddr_in6 *)sasrc)->sin6_addr))
|
||||
srcmatch = 1;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
if (!srcmatch) {
|
||||
PIPEX_DBG((NULL, LOG_DEBUG,
|
||||
"<%s> the source address of the session is not matched",
|
||||
__func__));
|
||||
goto not_ours;
|
||||
}
|
||||
|
||||
return (session);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: pipex.h,v 1.33 2022/07/12 08:58:53 mvs Exp $ */
|
||||
/* $OpenBSD: pipex.h,v 1.34 2025/01/25 02:06:40 yasuoka Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 Internet Initiative Japan Inc.
|
||||
|
@ -171,28 +171,38 @@ extern int pipex_enable;
|
|||
struct pipex_session;
|
||||
|
||||
__BEGIN_DECLS
|
||||
void pipex_init (void);
|
||||
|
||||
struct pipex_session *pipex_pppoe_lookup_session (struct mbuf *);
|
||||
struct mbuf *pipex_pppoe_input (struct mbuf *, struct pipex_session *);
|
||||
struct pipex_session *pipex_pptp_lookup_session (struct mbuf *);
|
||||
struct mbuf *pipex_pptp_input (struct mbuf *, struct pipex_session *);
|
||||
struct pipex_session *pipex_pptp_userland_lookup_session_ipv4 (struct mbuf *, struct in_addr);
|
||||
struct pipex_session *pipex_pptp_userland_lookup_session_ipv6 (struct mbuf *, struct in6_addr);
|
||||
struct pipex_session *pipex_l2tp_userland_lookup_session(struct mbuf *, struct sockaddr *);
|
||||
struct mbuf *pipex_pptp_userland_output (struct mbuf *, struct pipex_session *);
|
||||
struct pipex_session *pipex_l2tp_lookup_session (struct mbuf *, int);
|
||||
struct mbuf *pipex_l2tp_input (struct mbuf *, int off, struct pipex_session *, uint32_t);
|
||||
struct pipex_session *pipex_l2tp_userland_lookup_session_ipv4 (struct mbuf *, struct in_addr);
|
||||
struct pipex_session *pipex_l2tp_userland_lookup_session_ipv6 (struct mbuf *, struct in6_addr);
|
||||
struct mbuf *pipex_l2tp_userland_output (struct mbuf *, struct pipex_session *);
|
||||
void pipex_rele_session(struct pipex_session *);
|
||||
int pipex_ioctl (void *, u_long, caddr_t);
|
||||
void pipex_session_init_mppe_recv(struct pipex_session *, int,
|
||||
int, u_char *);
|
||||
void pipex_session_init_mppe_send(struct pipex_session *, int,
|
||||
int, u_char *);
|
||||
void pipex_init(void);
|
||||
|
||||
struct pipex_session *pipex_pppoe_lookup_session(struct mbuf *);
|
||||
struct mbuf *pipex_pppoe_input(struct mbuf *,
|
||||
struct pipex_session *);
|
||||
struct pipex_session *pipex_pptp_lookup_session(struct mbuf *);
|
||||
struct mbuf *pipex_pptp_input(struct mbuf *,
|
||||
struct pipex_session *);
|
||||
struct pipex_session *pipex_pptp_userland_lookup_session_ipv4(struct mbuf *,
|
||||
struct in_addr);
|
||||
struct pipex_session *pipex_pptp_userland_lookup_session_ipv6(struct mbuf *,
|
||||
struct in6_addr);
|
||||
struct pipex_session *pipex_l2tp_userland_lookup_session(struct mbuf *,
|
||||
struct sockaddr *);
|
||||
struct mbuf *pipex_pptp_userland_output(struct mbuf *,
|
||||
struct pipex_session *);
|
||||
struct pipex_session *pipex_l2tp_lookup_session(struct mbuf *, int,
|
||||
struct sockaddr *);
|
||||
struct mbuf *pipex_l2tp_input(struct mbuf *, int off,
|
||||
struct pipex_session *, uint32_t);
|
||||
struct pipex_session *pipex_l2tp_userland_lookup_session_ipv4(struct mbuf *,
|
||||
struct in_addr);
|
||||
struct pipex_session *pipex_l2tp_userland_lookup_session_ipv6(struct mbuf *,
|
||||
struct in6_addr);
|
||||
struct mbuf *pipex_l2tp_userland_output(struct mbuf *,
|
||||
struct pipex_session *);
|
||||
void pipex_rele_session(struct pipex_session *);
|
||||
int pipex_ioctl(void *, u_long, caddr_t);
|
||||
void pipex_session_init_mppe_recv(struct pipex_session *,
|
||||
int, int, u_char *);
|
||||
void pipex_session_init_mppe_send(struct pipex_session *,
|
||||
int, int, u_char *);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: tcp_input.c,v 1.423 2025/01/16 11:59:20 bluhm Exp $ */
|
||||
/* $OpenBSD: tcp_input.c,v 1.425 2025/01/25 23:55:32 bluhm Exp $ */
|
||||
/* $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -3532,16 +3532,18 @@ syn_cache_get(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th,
|
|||
{
|
||||
struct syn_cache *sc;
|
||||
struct syn_cache_head *scp;
|
||||
struct inpcb *inp, *oldinp;
|
||||
struct socket *listenso;
|
||||
struct inpcb *inp, *listeninp;
|
||||
struct tcpcb *tp = NULL;
|
||||
struct mbuf *am;
|
||||
struct socket *oso;
|
||||
u_int rtableid;
|
||||
|
||||
NET_ASSERT_LOCKED();
|
||||
|
||||
inp = sotoinpcb(so);
|
||||
|
||||
mtx_enter(&syn_cache_mtx);
|
||||
sc = syn_cache_lookup(src, dst, &scp, sotoinpcb(so)->inp_rtableid);
|
||||
sc = syn_cache_lookup(src, dst, &scp, inp->inp_rtableid);
|
||||
if (sc == NULL) {
|
||||
mtx_leave(&syn_cache_mtx);
|
||||
return (NULL);
|
||||
|
@ -3571,34 +3573,35 @@ syn_cache_get(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th,
|
|||
* connection when the SYN arrived. If we can't create
|
||||
* the connection, abort it.
|
||||
*/
|
||||
oso = so;
|
||||
so = sonewconn(so, SS_ISCONNECTED, M_DONTWAIT);
|
||||
listenso = so;
|
||||
listeninp = inp;
|
||||
so = sonewconn(listenso, SS_ISCONNECTED, M_DONTWAIT);
|
||||
if (so == NULL)
|
||||
goto resetandabort;
|
||||
|
||||
oldinp = sotoinpcb(oso);
|
||||
soassertlocked(so);
|
||||
soref(so);
|
||||
inp = sotoinpcb(so);
|
||||
tp = intotcpcb(inp);
|
||||
|
||||
#ifdef IPSEC
|
||||
/*
|
||||
* We need to copy the required security levels
|
||||
* from the old pcb. Ditto for any other
|
||||
* IPsec-related information.
|
||||
* We need to copy the required security levels from the listen pcb.
|
||||
* Ditto for any other IPsec-related information.
|
||||
*/
|
||||
inp->inp_seclevel = oldinp->inp_seclevel;
|
||||
inp->inp_seclevel = listeninp->inp_seclevel;
|
||||
#endif /* IPSEC */
|
||||
#ifdef INET6
|
||||
if (ISSET(inp->inp_flags, INP_IPV6)) {
|
||||
KASSERT(ISSET(oldinp->inp_flags, INP_IPV6));
|
||||
KASSERT(ISSET(listeninp->inp_flags, INP_IPV6));
|
||||
|
||||
inp->inp_ipv6.ip6_hlim = oldinp->inp_ipv6.ip6_hlim;
|
||||
inp->inp_hops = oldinp->inp_hops;
|
||||
inp->inp_ipv6.ip6_hlim = listeninp->inp_ipv6.ip6_hlim;
|
||||
inp->inp_hops = listeninp->inp_hops;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
KASSERT(!ISSET(oldinp->inp_flags, INP_IPV6));
|
||||
KASSERT(!ISSET(listeninp->inp_flags, INP_IPV6));
|
||||
|
||||
inp->inp_ip.ip_ttl = oldinp->inp_ip.ip_ttl;
|
||||
inp->inp_ip.ip_ttl = listeninp->inp_ip.ip_ttl;
|
||||
inp->inp_options = ip_srcroute(m);
|
||||
if (inp->inp_options == NULL) {
|
||||
inp->inp_options = sc->sc_ipopts;
|
||||
|
@ -3636,8 +3639,7 @@ syn_cache_get(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th,
|
|||
}
|
||||
(void) m_free(am);
|
||||
|
||||
tp = intotcpcb(inp);
|
||||
tp->t_flags = sototcpcb(oso)->t_flags & (TF_NOPUSH|TF_NODELAY);
|
||||
tp->t_flags = intotcpcb(listeninp)->t_flags & (TF_NOPUSH|TF_NODELAY);
|
||||
if (sc->sc_request_r_scale != 15) {
|
||||
tp->requested_s_scale = sc->sc_requested_s_scale;
|
||||
tp->request_r_scale = sc->sc_request_r_scale;
|
||||
|
@ -3649,7 +3651,6 @@ syn_cache_get(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th,
|
|||
tp->t_template = tcp_template(tp);
|
||||
if (tp->t_template == 0) {
|
||||
tp = tcp_drop(tp, ENOBUFS); /* destroys socket */
|
||||
so = NULL;
|
||||
goto abort;
|
||||
}
|
||||
tp->sack_enable = ISSET(sc->sc_fixflags, SCF_SACK_PERMIT);
|
||||
|
@ -3700,6 +3701,7 @@ syn_cache_get(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th,
|
|||
tp->rcv_adv = tp->rcv_nxt + sc->sc_win;
|
||||
tp->last_ack_sent = tp->rcv_nxt;
|
||||
|
||||
in_pcbsounlock_rele(inp, so);
|
||||
tcpstat_inc(tcps_sc_completed);
|
||||
syn_cache_put(sc);
|
||||
return (so);
|
||||
|
@ -3707,10 +3709,11 @@ syn_cache_get(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th,
|
|||
resetandabort:
|
||||
tcp_respond(NULL, mtod(m, caddr_t), th, (tcp_seq)0, th->th_ack, TH_RST,
|
||||
m->m_pkthdr.ph_rtableid, now);
|
||||
abort:
|
||||
m_freem(m);
|
||||
if (so != NULL)
|
||||
soabort(so);
|
||||
abort:
|
||||
m_freem(m);
|
||||
in_pcbsounlock_rele(inp, so);
|
||||
syn_cache_put(sc);
|
||||
tcpstat_inc(tcps_sc_aborted);
|
||||
return ((struct socket *)(-1));
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: udp_usrreq.c,v 1.329 2025/01/01 13:44:22 bluhm Exp $ */
|
||||
/* $OpenBSD: udp_usrreq.c,v 1.330 2025/01/25 02:06:40 yasuoka Exp $ */
|
||||
/* $NetBSD: udp_usrreq.c,v 1.28 1996/03/16 23:54:03 christos Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -619,7 +619,8 @@ udp_input(struct mbuf **mp, int *offp, int proto, int af)
|
|||
struct pipex_session *session;
|
||||
int off = iphlen + sizeof(struct udphdr);
|
||||
|
||||
if ((session = pipex_l2tp_lookup_session(m, off)) != NULL) {
|
||||
if ((session = pipex_l2tp_lookup_session(m, off, &srcsa.sa))
|
||||
!= NULL) {
|
||||
m = *mp = pipex_l2tp_input(m, off, session,
|
||||
ipsecflowinfo);
|
||||
pipex_rele_session(session);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: proc.h,v 1.377 2024/12/17 14:45:00 claudio Exp $ */
|
||||
/* $OpenBSD: proc.h,v 1.378 2025/01/25 19:21:40 claudio Exp $ */
|
||||
/* $NetBSD: proc.h,v 1.44 1996/04/22 01:23:21 christos Exp $ */
|
||||
|
||||
/*-
|
||||
|
@ -600,7 +600,7 @@ refreshcreds(struct proc *p)
|
|||
|
||||
int single_thread_set(struct proc *, int);
|
||||
int single_thread_wait(struct process *, int);
|
||||
void single_thread_clear(struct proc *, int);
|
||||
void single_thread_clear(struct proc *);
|
||||
int single_thread_check(struct proc *, int);
|
||||
|
||||
void child_return(void *);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: uvm_pdaemon.c,v 1.133 2024/12/27 12:04:40 mpi Exp $ */
|
||||
/* $OpenBSD: uvm_pdaemon.c,v 1.134 2025/01/25 08:55:52 mpi Exp $ */
|
||||
/* $NetBSD: uvm_pdaemon.c,v 1.23 2000/08/20 10:24:14 bjh21 Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -848,7 +848,6 @@ uvmpd_scan_inactive(struct uvm_pmalloc *pma, int shortage)
|
|||
anon->an_page = NULL;
|
||||
p->uanon = NULL;
|
||||
|
||||
rw_exit(anon->an_lock);
|
||||
uvm_anfree(anon); /* kills anon */
|
||||
pmap_page_protect(p, PROT_NONE);
|
||||
anon = NULL;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: mandoc.css,v 1.39 2022/07/06 14:27:55 schwarze Exp $ */
|
||||
/* $OpenBSD: mandoc.css,v 1.41 2025/01/25 03:17:11 schwarze Exp $ */
|
||||
/*
|
||||
* Standard style sheet for mandoc(1) -Thtml and man.cgi(8).
|
||||
*
|
||||
|
@ -179,7 +179,8 @@ h3.Ss { margin-top: 1.2em;
|
|||
.RsP { }
|
||||
.RsQ { }
|
||||
.RsR { }
|
||||
.RsT { text-decoration: underline; }
|
||||
.RsT { font-style: normal;
|
||||
font-weight: normal; }
|
||||
.RsU { }
|
||||
.RsV { }
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: mdoc_html.c,v 1.226 2025/01/19 16:36:24 schwarze Exp $ */
|
||||
/* $OpenBSD: mdoc_html.c,v 1.228 2025/01/25 00:19:23 schwarze Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2014-2022, 2025 Ingo Schwarze <schwarze@openbsd.org>
|
||||
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||
|
@ -1454,7 +1454,7 @@ mdoc_rs_pre(MDOC_ARGS)
|
|||
case ROFFT_BODY:
|
||||
if (n->sec == SEC_SEE_ALSO)
|
||||
print_otag(h, TAG_P, "c", "Pp");
|
||||
print_otag(h, TAG_CITE, "c", "Rs");
|
||||
print_otag(h, TAG_SPAN, "c", "Rs");
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
|
@ -1508,7 +1508,7 @@ mdoc__x_pre(MDOC_ARGS)
|
|||
print_text(h, "and");
|
||||
break;
|
||||
case MDOC__B:
|
||||
t = TAG_I;
|
||||
t = TAG_CITE;
|
||||
cattr = "RsB";
|
||||
break;
|
||||
case MDOC__C:
|
||||
|
@ -1553,7 +1553,14 @@ mdoc__x_pre(MDOC_ARGS)
|
|||
cattr = "RsR";
|
||||
break;
|
||||
case MDOC__T:
|
||||
cattr = "RsT";
|
||||
t = TAG_CITE;
|
||||
if (n->parent != NULL && n->parent->tok == MDOC_Rs &&
|
||||
n->parent->norm->Rs.quote_T) {
|
||||
print_text(h, "\\(lq");
|
||||
h->flags |= HTML_NOSPACE;
|
||||
cattr = "RsT";
|
||||
} else
|
||||
cattr = "RsB";
|
||||
break;
|
||||
case MDOC__U:
|
||||
print_otag(h, TAG_A, "ch", "RsU", arg);
|
||||
|
@ -1574,14 +1581,23 @@ mdoc__x_post(MDOC_ARGS)
|
|||
{
|
||||
struct roff_node *nn;
|
||||
|
||||
if (n->tok == MDOC__A &&
|
||||
(nn = roff_node_next(n)) != NULL && nn->tok == MDOC__A &&
|
||||
((nn = roff_node_next(nn)) == NULL || nn->tok != MDOC__A) &&
|
||||
((nn = roff_node_prev(n)) == NULL || nn->tok != MDOC__A))
|
||||
return;
|
||||
|
||||
/* TODO: %U */
|
||||
|
||||
switch (n->tok) {
|
||||
case MDOC__A:
|
||||
if ((nn = roff_node_next(n)) != NULL && nn->tok == MDOC__A &&
|
||||
((nn = roff_node_next(nn)) == NULL || nn->tok != MDOC__A) &&
|
||||
((nn = roff_node_prev(n)) == NULL || nn->tok != MDOC__A))
|
||||
return;
|
||||
break;
|
||||
case MDOC__T:
|
||||
if (n->parent != NULL && n->parent->tok == MDOC_Rs &&
|
||||
n->parent->norm->Rs.quote_T) {
|
||||
h->flags |= HTML_NOSPACE;
|
||||
print_text(h, "\\(rq");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (n->parent == NULL || n->parent->tok != MDOC_Rs)
|
||||
return;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* $OpenBSD: mdoc_man.c,v 1.136 2022/12/26 19:16:02 jmc Exp $ */
|
||||
/* $OpenBSD: mdoc_man.c,v 1.137 2025/01/24 22:36:51 schwarze Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2011-2021 Ingo Schwarze <schwarze@openbsd.org>
|
||||
* Copyright (c) 2011-2021, 2025 Ingo Schwarze <schwarze@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
|
||||
|
@ -794,6 +794,9 @@ post_percent(DECL_ARGS)
|
|||
if (mdoc_man_act(n->tok)->pre == pre_em)
|
||||
font_pop();
|
||||
|
||||
if (n->parent == NULL || n->parent->tok != MDOC_Rs)
|
||||
return;
|
||||
|
||||
if ((nn = roff_node_next(n)) != NULL) {
|
||||
np = roff_node_prev(n);
|
||||
nnn = nn == NULL ? NULL : roff_node_next(nn);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: kroute.c,v 1.310 2024/09/04 15:06:36 claudio Exp $ */
|
||||
/* $OpenBSD: kroute.c,v 1.311 2025/01/25 09:49:05 denis Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
|
||||
|
@ -476,6 +476,9 @@ kr_change(u_int rtableid, struct kroute_full *kf)
|
|||
return (krVPN4_change(kt, kf));
|
||||
case AID_VPN_IPv6:
|
||||
return (krVPN6_change(kt, kf));
|
||||
case AID_EVPN:
|
||||
/* XXX ignored for now */
|
||||
return (0);
|
||||
}
|
||||
log_warnx("%s: not handled AID", __func__);
|
||||
return (-1);
|
||||
|
@ -1896,6 +1899,9 @@ kroute_remove(struct ktable *kt, struct kroute_full *kf, int any)
|
|||
case AID_VPN_IPv6:
|
||||
multipath = kroute6_remove(kt, kf, any);
|
||||
break;
|
||||
case AID_EVPN:
|
||||
/* XXX ignored for now */
|
||||
return (0);
|
||||
default:
|
||||
log_warnx("%s: not handled AID", __func__);
|
||||
return (-1);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: rtr_proto.c,v 1.48 2025/01/09 12:07:49 claudio Exp $ */
|
||||
/* $OpenBSD: rtr_proto.c,v 1.49 2025/01/25 07:23:30 claudio Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2020 Claudio Jeker <claudio@openbsd.org>
|
||||
|
@ -827,8 +827,10 @@ rtr_parse_aspa(struct rtr_session *rs, struct ibuf *pdu)
|
|||
return -1;
|
||||
}
|
||||
for (i = 0; i < cnt; i++) {
|
||||
if (ibuf_get_n32(pdu, &aspa->tas[i]) == -1)
|
||||
if (ibuf_get_n32(pdu, &aspa->tas[i]) == -1) {
|
||||
free_aspa(aspa);
|
||||
goto badlen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue