sync with OpenBSD -current

This commit is contained in:
purplerain 2024-10-08 04:15:41 +00:00
parent 06882d626f
commit 855cd93650
Signed by: purplerain
GPG Key ID: F42C07F07E2E35B7
12 changed files with 71 additions and 81 deletions

View File

@ -62,6 +62,10 @@
#define RETVAL_TRUNC -4
/** return code that means all is peachy keen. Equal to DNS rcode NOERROR */
#define RETVAL_OK 0
/** Max compressions we are willing to perform; more than that will result
* in semi-compressed messages, or truncated even on TCP for huge messages, to
* avoid locking the CPU for long */
#define MAX_COMPRESSION_PER_MESSAGE 120
/**
* Data structure to help domain name compression in outgoing messages.
@ -286,13 +290,15 @@ write_compressed_dname(sldns_buffer* pkt, uint8_t* dname, int labs,
static int
compress_owner(struct ub_packed_rrset_key* key, sldns_buffer* pkt,
struct regional* region, struct compress_tree_node** tree,
size_t owner_pos, uint16_t* owner_ptr, int owner_labs)
size_t owner_pos, uint16_t* owner_ptr, int owner_labs,
size_t* compress_count)
{
struct compress_tree_node* p;
struct compress_tree_node** insertpt = NULL;
if(!*owner_ptr) {
/* compress first time dname */
if((p = compress_tree_lookup(tree, key->rk.dname,
if(*compress_count < MAX_COMPRESSION_PER_MESSAGE &&
(p = compress_tree_lookup(tree, key->rk.dname,
owner_labs, &insertpt))) {
if(p->labs == owner_labs)
/* avoid ptr chains, since some software is
@ -301,6 +307,7 @@ compress_owner(struct ub_packed_rrset_key* key, sldns_buffer* pkt,
if(!write_compressed_dname(pkt, key->rk.dname,
owner_labs, p))
return RETVAL_TRUNC;
(*compress_count)++;
/* check if typeclass+4 ttl + rdatalen is available */
if(sldns_buffer_remaining(pkt) < 4+4+2)
return RETVAL_TRUNC;
@ -313,7 +320,8 @@ compress_owner(struct ub_packed_rrset_key* key, sldns_buffer* pkt,
if(owner_pos <= PTR_MAX_OFFSET)
*owner_ptr = htons(PTR_CREATE(owner_pos));
}
if(!compress_tree_store(key->rk.dname, owner_labs,
if(*compress_count < MAX_COMPRESSION_PER_MESSAGE &&
!compress_tree_store(key->rk.dname, owner_labs,
owner_pos, region, p, insertpt))
return RETVAL_OUTMEM;
} else {
@ -334,19 +342,23 @@ compress_owner(struct ub_packed_rrset_key* key, sldns_buffer* pkt,
/** compress any domain name to the packet, return RETVAL_* */
static int
compress_any_dname(uint8_t* dname, sldns_buffer* pkt, int labs,
struct regional* region, struct compress_tree_node** tree)
struct regional* region, struct compress_tree_node** tree,
size_t* compress_count)
{
struct compress_tree_node* p;
struct compress_tree_node** insertpt = NULL;
size_t pos = sldns_buffer_position(pkt);
if((p = compress_tree_lookup(tree, dname, labs, &insertpt))) {
if(*compress_count < MAX_COMPRESSION_PER_MESSAGE &&
(p = compress_tree_lookup(tree, dname, labs, &insertpt))) {
if(!write_compressed_dname(pkt, dname, labs, p))
return RETVAL_TRUNC;
(*compress_count)++;
} else {
if(!dname_buffer_write(pkt, dname))
return RETVAL_TRUNC;
}
if(!compress_tree_store(dname, labs, pos, region, p, insertpt))
if(*compress_count < MAX_COMPRESSION_PER_MESSAGE &&
!compress_tree_store(dname, labs, pos, region, p, insertpt))
return RETVAL_OUTMEM;
return RETVAL_OK;
}
@ -366,7 +378,7 @@ type_rdata_compressable(struct ub_packed_rrset_key* key)
static int
compress_rdata(sldns_buffer* pkt, uint8_t* rdata, size_t todolen,
struct regional* region, struct compress_tree_node** tree,
const sldns_rr_descriptor* desc)
const sldns_rr_descriptor* desc, size_t* compress_count)
{
int labs, r, rdf = 0;
size_t dname_len, len, pos = sldns_buffer_position(pkt);
@ -381,7 +393,7 @@ compress_rdata(sldns_buffer* pkt, uint8_t* rdata, size_t todolen,
case LDNS_RDF_TYPE_DNAME:
labs = dname_count_size_labels(rdata, &dname_len);
if((r=compress_any_dname(rdata, pkt, labs, region,
tree)) != RETVAL_OK)
tree, compress_count)) != RETVAL_OK)
return r;
rdata += dname_len;
todolen -= dname_len;
@ -449,7 +461,8 @@ static int
packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt,
uint16_t* num_rrs, time_t timenow, struct regional* region,
int do_data, int do_sig, struct compress_tree_node** tree,
sldns_pkt_section s, uint16_t qtype, int dnssec, size_t rr_offset)
sldns_pkt_section s, uint16_t qtype, int dnssec, size_t rr_offset,
size_t* compress_count)
{
size_t i, j, owner_pos;
int r, owner_labs;
@ -478,8 +491,8 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt,
/* rrset roundrobin */
j = (i + rr_offset) % data->count;
if((r=compress_owner(key, pkt, region, tree,
owner_pos, &owner_ptr, owner_labs))
!= RETVAL_OK)
owner_pos, &owner_ptr, owner_labs,
compress_count)) != RETVAL_OK)
return r;
sldns_buffer_write(pkt, &key->rk.type, 2);
sldns_buffer_write(pkt, &key->rk.rrset_class, 2);
@ -489,8 +502,8 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt,
else sldns_buffer_write_u32(pkt, data->rr_ttl[j]-adjust);
if(c) {
if((r=compress_rdata(pkt, data->rr_data[j],
data->rr_len[j], region, tree, c))
!= RETVAL_OK)
data->rr_len[j], region, tree, c,
compress_count)) != RETVAL_OK)
return r;
} else {
if(sldns_buffer_remaining(pkt) < data->rr_len[j])
@ -511,8 +524,8 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt,
sldns_buffer_write(pkt, &owner_ptr, 2);
} else {
if((r=compress_any_dname(key->rk.dname,
pkt, owner_labs, region, tree))
!= RETVAL_OK)
pkt, owner_labs, region, tree,
compress_count)) != RETVAL_OK)
return r;
if(sldns_buffer_remaining(pkt) <
4+4+data->rr_len[i])
@ -544,7 +557,8 @@ static int
insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs,
sldns_buffer* pkt, size_t rrsets_before, time_t timenow,
struct regional* region, struct compress_tree_node** tree,
sldns_pkt_section s, uint16_t qtype, int dnssec, size_t rr_offset)
sldns_pkt_section s, uint16_t qtype, int dnssec, size_t rr_offset,
size_t* compress_count)
{
int r;
size_t i, setstart;
@ -560,7 +574,7 @@ insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs,
setstart = sldns_buffer_position(pkt);
if((r=packed_rrset_encode(rep->rrsets[rrsets_before+i],
pkt, num_rrs, timenow, region, 1, 1, tree,
s, qtype, dnssec, rr_offset))
s, qtype, dnssec, rr_offset, compress_count))
!= RETVAL_OK) {
/* Bad, but if due to size must set TC bit */
/* trim off the rrset neatly. */
@ -573,7 +587,7 @@ insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs,
setstart = sldns_buffer_position(pkt);
if((r=packed_rrset_encode(rep->rrsets[rrsets_before+i],
pkt, num_rrs, timenow, region, 1, 0, tree,
s, qtype, dnssec, rr_offset))
s, qtype, dnssec, rr_offset, compress_count))
!= RETVAL_OK) {
sldns_buffer_set_position(pkt, setstart);
return r;
@ -584,7 +598,7 @@ insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs,
setstart = sldns_buffer_position(pkt);
if((r=packed_rrset_encode(rep->rrsets[rrsets_before+i],
pkt, num_rrs, timenow, region, 0, 1, tree,
s, qtype, dnssec, rr_offset))
s, qtype, dnssec, rr_offset, compress_count))
!= RETVAL_OK) {
sldns_buffer_set_position(pkt, setstart);
return r;
@ -677,6 +691,7 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
struct compress_tree_node* tree = 0;
int r;
size_t rr_offset;
size_t compress_count=0;
sldns_buffer_clear(buffer);
if(udpsize < sldns_buffer_limit(buffer))
@ -723,7 +738,7 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
arep.rrsets = &qinfo->local_alias->rrset;
if((r=insert_section(&arep, 1, &ancount, buffer, 0,
timezero, region, &tree, LDNS_SECTION_ANSWER,
qinfo->qtype, dnssec, rr_offset)) != RETVAL_OK) {
qinfo->qtype, dnssec, rr_offset, &compress_count)) != RETVAL_OK) {
if(r == RETVAL_TRUNC) {
/* create truncated message */
sldns_buffer_write_u16_at(buffer, 6, ancount);
@ -738,7 +753,7 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
/* insert answer section */
if((r=insert_section(rep, rep->an_numrrsets, &ancount, buffer,
0, timenow, region, &tree, LDNS_SECTION_ANSWER, qinfo->qtype,
dnssec, rr_offset)) != RETVAL_OK) {
dnssec, rr_offset, &compress_count)) != RETVAL_OK) {
if(r == RETVAL_TRUNC) {
/* create truncated message */
sldns_buffer_write_u16_at(buffer, 6, ancount);
@ -756,7 +771,7 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
if((r=insert_section(rep, rep->ns_numrrsets, &nscount, buffer,
rep->an_numrrsets, timenow, region, &tree,
LDNS_SECTION_AUTHORITY, qinfo->qtype,
dnssec, rr_offset)) != RETVAL_OK) {
dnssec, rr_offset, &compress_count)) != RETVAL_OK) {
if(r == RETVAL_TRUNC) {
/* create truncated message */
sldns_buffer_write_u16_at(buffer, 8, nscount);
@ -773,7 +788,7 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
if((r=insert_section(rep, rep->ar_numrrsets, &arcount, buffer,
rep->an_numrrsets + rep->ns_numrrsets, timenow, region,
&tree, LDNS_SECTION_ADDITIONAL, qinfo->qtype,
dnssec, rr_offset)) != RETVAL_OK) {
dnssec, rr_offset, &compress_count)) != RETVAL_OK) {
if(r == RETVAL_TRUNC) {
/* no need to set TC bit, this is the additional */
sldns_buffer_write_u16_at(buffer, 10, arcount);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: identcpu.c,v 1.147 2024/08/27 09:16:03 bluhm Exp $ */
/* $OpenBSD: identcpu.c,v 1.148 2024/10/07 20:30:17 dv Exp $ */
/* $NetBSD: identcpu.c,v 1.1 2003/04/26 18:39:28 fvdl Exp $ */
/*
@ -952,11 +952,6 @@ cpu_check_vmm_cap(struct cpu_info *ci)
/* EPT available? */
if (msr & (IA32_VMX_ENABLE_EPT) << 32)
ci->ci_vmm_flags |= CI_VMM_EPT;
/* VM Functions available? */
if (msr & (IA32_VMX_ENABLE_VM_FUNCTIONS) << 32) {
ci->ci_vmm_cap.vcc_vmx.vmx_vm_func =
rdmsr(IA32_VMX_VMFUNC);
}
}
}

View File

@ -1,4 +1,4 @@
/* $OpenBSD: vmm_machdep.c,v 1.38 2024/09/26 13:18:25 dv Exp $ */
/* $OpenBSD: vmm_machdep.c,v 1.39 2024/10/07 20:30:17 dv Exp $ */
/*
* Copyright (c) 2014 Mike Larkin <mlarkin@openbsd.org>
*
@ -7156,16 +7156,6 @@ vmx_dump_vmcs(struct vcpu *vcpu)
DPRINTF("\n");
}
if (vcpu_vmx_check_cap(vcpu, IA32_VMX_PROCBASED2_CTLS,
IA32_VMX_ENABLE_VM_FUNCTIONS, 1)) {
/* We assume all CPUs have the same VMFUNC caps */
if (curcpu()->ci_vmm_cap.vcc_vmx.vmx_vm_func & 0x1) {
vmx_dump_vmcs_field(VMCS_EPTP_LIST_ADDRESS,
"EPTP List Addr");
DPRINTF("\n");
}
}
if (vcpu_vmx_check_cap(vcpu, IA32_VMX_PROCBASED2_CTLS,
IA32_VMX_VMCS_SHADOWING, 1)) {
vmx_dump_vmcs_field(VMCS_VMREAD_BITMAP_ADDRESS,

View File

@ -1,4 +1,4 @@
/* $OpenBSD: cpu.h,v 1.177 2024/09/26 13:18:25 dv Exp $ */
/* $OpenBSD: cpu.h,v 1.178 2024/10/07 20:30:17 dv Exp $ */
/* $NetBSD: cpu.h,v 1.1 2003/04/26 18:39:39 fvdl Exp $ */
/*-
@ -73,7 +73,6 @@ struct vmx {
uint32_t vmx_vmxon_revision;
uint32_t vmx_msr_table_size;
uint32_t vmx_cr3_tgt_count;
uint64_t vmx_vm_func;
uint8_t vmx_has_l1_flush_msr;
uint64_t vmx_invept_mode;
};

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ufshci_acpi.c,v 1.2 2024/01/06 17:47:43 mglocker Exp $ */
/* $OpenBSD: ufshci_acpi.c,v 1.3 2024/10/08 00:46:29 jsg Exp $ */
/*
* Copyright (c) 2022 Marcus Glocker <mglocker@openbsd.org>
*
@ -45,7 +45,8 @@ int ufshci_acpi_match(struct device *, void *, void *);
void ufshci_acpi_attach(struct device *, struct device *, void *);
const struct cfattach ufshci_acpi_ca = {
sizeof(struct ufshci_acpi_softc), ufshci_acpi_match, ufshci_acpi_attach
sizeof(struct ufshci_acpi_softc), ufshci_acpi_match, ufshci_acpi_attach,
NULL, ufshci_activate
};
const char *ufshci_hids[] = {

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ufshci_fdt.c,v 1.1 2024/07/31 10:07:33 mglocker Exp $ */
/* $OpenBSD: ufshci_fdt.c,v 1.2 2024/10/08 00:46:29 jsg Exp $ */
/*
* Copyright (c) 2024 Marcus Glocker <mglocker@openbsd.org>
*
@ -36,7 +36,9 @@ void ufshci_fdt_attach(struct device *, struct device *, void *);
const struct cfattach ufshci_fdt_ca = {
sizeof(struct ufshci_softc),
ufshci_fdt_match,
ufshci_fdt_attach
ufshci_fdt_attach,
NULL,
ufshci_activate
};
int

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ufshci.c,v 1.41 2024/08/30 18:22:41 mglocker Exp $ */
/* $OpenBSD: ufshci.c,v 1.42 2024/10/08 00:46:29 jsg Exp $ */
/*
* Copyright (c) 2022 Marcus Glocker <mglocker@openbsd.org>
@ -1380,8 +1380,9 @@ ufshci_xfer_complete(struct ufshci_softc *sc)
}
int
ufshci_activate(struct ufshci_softc *sc, int act)
ufshci_activate(struct device *self, int act)
{
struct ufshci_softc *sc = (struct ufshci_softc *)self;
int rv = 0;
switch (act) {

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ufshcivar.h,v 1.9 2024/05/29 00:48:15 jsg Exp $ */
/* $OpenBSD: ufshcivar.h,v 1.10 2024/10/08 00:46:29 jsg Exp $ */
/*
* Copyright (c) 2022 Marcus Glocker <mglocker@openbsd.org>
@ -83,4 +83,4 @@ struct ufshci_softc {
int ufshci_intr(void *);
int ufshci_attach(struct ufshci_softc *);
int ufshci_activate(struct ufshci_softc *, int);
int ufshci_activate(struct device *, int);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ufshci_pci.c,v 1.4 2024/05/24 09:51:13 mglocker Exp $ */
/* $OpenBSD: ufshci_pci.c,v 1.5 2024/10/08 00:46:29 jsg Exp $ */
/*
* Copyright (c) 2024 Marcus Glocker <mglocker@openbsd.org>
@ -41,14 +41,13 @@ struct ufshci_pci_softc {
int ufshci_pci_match(struct device *, void *, void *);
void ufshci_pci_attach(struct device *, struct device *, void *);
int ufshci_pci_detach(struct device *, int);
int ufshci_pci_activate(struct device *, int);
const struct cfattach ufshci_pci_ca = {
sizeof(struct ufshci_pci_softc),
ufshci_pci_match,
ufshci_pci_attach,
ufshci_pci_detach,
ufshci_pci_activate
ufshci_activate
};
int
@ -108,11 +107,3 @@ ufshci_pci_detach(struct device *self, int flags)
{
return 0;
}
int
ufshci_pci_activate(struct device *self, int act)
{
struct ufshci_pci_softc *psc = (struct ufshci_pci_softc *)self;
return ufshci_activate(&psc->psc_ufshci, act);
}

View File

@ -1,4 +1,4 @@
/* $OpenBSD: uvm_extern.h,v 1.177 2024/08/24 10:46:43 mpi Exp $ */
/* $OpenBSD: uvm_extern.h,v 1.178 2024/10/08 02:29:10 jsg Exp $ */
/* $NetBSD: uvm_extern.h,v 1.57 2001/03/09 01:02:12 chs Exp $ */
/*
@ -280,7 +280,6 @@ int uvm_vslock_device(struct proc *, void *, size_t,
vm_prot_t, void **);
void uvm_vsunlock_device(struct proc *, void *, size_t,
void *);
void uvm_pause(void);
void uvm_init(void);
void uvm_init_percpu(void);
int uvm_io(vm_map_t, struct uio *, int);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: uvm_glue.c,v 1.84 2022/09/10 20:35:29 miod Exp $ */
/* $OpenBSD: uvm_glue.c,v 1.85 2024/10/08 02:29:10 jsg Exp $ */
/* $NetBSD: uvm_glue.c,v 1.44 2001/02/06 19:54:44 eeh Exp $ */
/*
@ -71,11 +71,9 @@
#include <sys/proc.h>
#include <sys/resourcevar.h>
#include <sys/buf.h>
#include <sys/user.h>
#ifdef SYSVSHM
#include <sys/shm.h>
#endif
#include <sys/sched.h>
#include <uvm/uvm.h>
@ -435,18 +433,6 @@ uvm_atopg(vaddr_t kva)
return (pg);
}
void
uvm_pause(void)
{
static unsigned int toggle;
if (toggle++ > 128) {
toggle = 0;
KERNEL_UNLOCK();
KERNEL_LOCK();
}
sched_pause(preempt);
}
#ifndef SMALL_KERNEL
int
fill_vmmap(struct process *pr, struct kinfo_vmentry *kve,

View File

@ -1,4 +1,4 @@
/* $Id: netproc.c,v 1.35 2024/04/28 10:09:25 tb Exp $ */
/* $Id: netproc.c,v 1.36 2024/10/07 23:47:00 sthen Exp $ */
/*
* Copyright (c) 2016 Kristaps Dzonsons <kristaps@bsd.lv>
*
@ -359,7 +359,7 @@ donewacc(struct conn *c, const struct capaths *p, const char *contact)
{
struct jsmnn *j = NULL;
int rc = 0;
char *req, *detail, *error = NULL;
char *req, *detail, *error = NULL, *accturi = NULL;
long lc;
if ((req = json_fmt_newacc(contact)) == NULL)
@ -384,6 +384,12 @@ donewacc(struct conn *c, const struct capaths *p, const char *contact)
else
rc = 1;
if (c->kid != NULL) {
if (stravis(&accturi, c->kid, VIS_SAFE) != -1)
dodbg("account key: %s", accturi);
free(accturi);
}
if (rc == 0 || verbose > 1)
buf_dump(&c->buf);
free(req);
@ -399,7 +405,7 @@ static int
dochkacc(struct conn *c, const struct capaths *p, const char *contact)
{
int rc = 0;
char *req;
char *req, *accturi = NULL;
long lc;
if ((req = json_fmt_chkacc()) == NULL)
@ -417,6 +423,11 @@ dochkacc(struct conn *c, const struct capaths *p, const char *contact)
if (c->kid == NULL)
rc = 0;
else {
if (stravis(&accturi, c->kid, VIS_SAFE) != -1)
dodbg("account key: %s", accturi);
free(accturi);
}
if (rc == 0 || verbose > 1)
buf_dump(&c->buf);