Lines Matching +full:sdi +full:- +full:enabled
1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
81 #include <crypto/rijndael/rijndael-api-fst.h>
244 /* Context information for dump-debuggers, saved by the dump_savectx() macro. */
305 error = mac_system_check_reboot(td->td_ucred, uap->opt); in sys_reboot()
310 if (uap->opt & RB_REROOT) in sys_reboot()
313 kern_reboot(uap->opt); in sys_reboot()
426 dumping--; in doadump()
558 * Mark the filesystem containing currently-running executable in kern_reroot()
561 vp = curproc->p_textvp; in kern_reroot()
565 mp = vp->v_mount; in kern_reroot()
586 * Remove the filesystem containing currently-running executable in kern_reroot()
590 * Also preserve /dev - forcibly unmounting it could cause driver in kern_reroot()
655 case -1: /* No console, just die */ in shutdown_halt()
675 if (panic_reboot_wait_time != -1) { in shutdown_panic()
676 printf("Automatic reboot in %d seconds - " in shutdown_panic()
680 loop > 0; --loop) { in shutdown_panic()
683 if (cncheckc() != -1) in shutdown_panic()
689 } else { /* zero time specified - reboot NOW */ in shutdown_panic()
692 printf("--> Press a key on the console to reboot,\n"); in shutdown_panic()
693 printf("--> or switch off the system now.\n"); in shutdown_panic()
710 * - it disables interrupts avoiding CPU0 preemption in shutdown_reset()
712 * - it avoids deadlocks against smp_rendezvous() or, more in shutdown_reset()
713 * generally, threads busy-waiting, with this spinlock held, in shutdown_reset()
770 "If warn_only is enabled, log (1) or do not log (0) assertion violations");
806 if (error != 0 || req->newptr == NULL) in kassert_sysctl_kassert()
829 * re-enter panic/kdb. in kassert_panic()
968 kdb_enter(KDB_WHY_PANIC, "re-panic"); in vpanic()
971 td->td_flags |= TDF_INPANIC; in vpanic()
987 * soft-updates inconsistencies.
1028 kproc_shutdown_wait, p->p_comm); in kproc_shutdown()
1048 kproc_shutdown_wait, td->td_name); in kthread_shutdown()
1075 sbuf_cat(&sb, di->di_devname); in dumpdevname_sysctl_handler()
1102 arc4rand(kdc->kdc_iv, sizeof(kdc->kdc_iv), 0); in kerneldumpcrypto_create()
1104 kdc->kdc_encryption = encryption; in kerneldumpcrypto_create()
1105 switch (kdc->kdc_encryption) { in kerneldumpcrypto_create()
1107 if (rijndael_makeKey(&kdc->kdc_ki, DIR_ENCRYPT, 256, key) <= 0) in kerneldumpcrypto_create()
1111 chacha_keysetup(&kdc->kdc_chacha, key, 256); in kerneldumpcrypto_create()
1117 kdc->kdc_dumpkeysize = dumpkeysize; in kerneldumpcrypto_create()
1118 kdk = kdc->kdc_dumpkey; in kerneldumpcrypto_create()
1119 kdk->kdk_encryption = kdc->kdc_encryption; in kerneldumpcrypto_create()
1120 memcpy(kdk->kdk_iv, kdc->kdc_iv, sizeof(kdk->kdk_iv)); in kerneldumpcrypto_create()
1121 kdk->kdk_encryptedkeysize = htod32(encryptedkeysize); in kerneldumpcrypto_create()
1122 memcpy(kdk->kdk_encryptedkey, encryptedkey, encryptedkeysize); in kerneldumpcrypto_create()
1148 SHA256_Update(&ctx, kdc->kdc_iv, sizeof(kdc->kdc_iv)); in kerneldumpcrypto_init()
1150 bcopy(hash, kdc->kdc_iv, sizeof(kdc->kdc_iv)); in kerneldumpcrypto_init()
1152 switch (kdc->kdc_encryption) { in kerneldumpcrypto_init()
1154 if (rijndael_cipherInit(&kdc->kdc_ci, MODE_CBC, in kerneldumpcrypto_init()
1155 kdc->kdc_iv) <= 0) { in kerneldumpcrypto_init()
1161 chacha_ivsetup(&kdc->kdc_chacha, kdc->kdc_iv, NULL); in kerneldumpcrypto_init()
1168 kdk = kdc->kdc_dumpkey; in kerneldumpcrypto_init()
1169 memcpy(kdk->kdk_iv, kdc->kdc_iv, sizeof(kdk->kdk_iv)); in kerneldumpcrypto_init()
1181 return (kdc->kdc_dumpkeysize); in kerneldumpcrypto_dumpkeysize()
1203 kdcomp->kdc_format = compression; in kerneldumpcomp_create()
1204 kdcomp->kdc_stream = compressor_init(kerneldumpcomp_write_cb, in kerneldumpcomp_create()
1205 format, di->maxiosize, kerneldump_gzlevel, di); in kerneldumpcomp_create()
1206 if (kdcomp->kdc_stream == NULL) { in kerneldumpcomp_create()
1210 kdcomp->kdc_buf = malloc(di->maxiosize, M_DUMPER, M_WAITOK | M_NODUMP); in kerneldumpcomp_create()
1219 kdcomp = di->kdcomp; in kerneldumpcomp_destroy()
1222 compressor_fini(kdcomp->kdc_stream); in kerneldumpcomp_destroy()
1223 zfree(kdcomp->kdc_buf, M_DUMPER); in kerneldumpcomp_destroy()
1237 zfree(di->blockbuf, M_DUMPER); in dumper_destroy()
1240 zfree(di->kdcrypto, M_EKCD); in dumper_destroy()
1262 newdi->blockbuf = NULL; in dumper_create()
1263 newdi->kdcrypto = NULL; in dumper_create()
1264 newdi->kdcomp = NULL; in dumper_create()
1265 strcpy(newdi->di_devname, devname); in dumper_create()
1267 if (kda->kda_encryption != KERNELDUMP_ENC_NONE) { in dumper_create()
1269 newdi->kdcrypto = kerneldumpcrypto_create(newdi->blocksize, in dumper_create()
1270 kda->kda_encryption, kda->kda_key, in dumper_create()
1271 kda->kda_encryptedkeysize, kda->kda_encryptedkey); in dumper_create()
1272 if (newdi->kdcrypto == NULL) { in dumper_create()
1281 if (kda->kda_compression != KERNELDUMP_COMP_NONE) { in dumper_create()
1289 if (kda->kda_encryption == KERNELDUMP_ENC_AES_256_CBC) { in dumper_create()
1294 newdi->kdcomp = kerneldumpcomp_create(newdi, in dumper_create()
1295 kda->kda_compression); in dumper_create()
1296 if (newdi->kdcomp == NULL) { in dumper_create()
1301 newdi->blockbuf = malloc(newdi->blocksize, M_DUMPER, M_WAITOK | M_ZERO); in dumper_create()
1322 index = kda->kda_index; in dumper_insert()
1343 index--; in dumper_insert()
1370 if (kda->kda_index == KDA_REMOVE_ALL) in dumper_config_match()
1373 if (strcmp(di->di_devname, devname) != 0) in dumper_config_match()
1379 if (kda->kda_index == KDA_REMOVE_DEV) in dumper_config_match()
1382 if (di->kdcomp != NULL) { in dumper_config_match()
1383 if (di->kdcomp->kdc_format != kda->kda_compression) in dumper_config_match()
1385 } else if (kda->kda_compression != KERNELDUMP_COMP_NONE) in dumper_config_match()
1388 if (di->kdcrypto != NULL) { in dumper_config_match()
1389 if (di->kdcrypto->kdc_encryption != kda->kda_encryption) in dumper_config_match()
1398 if (kda->kda_encryption != KERNELDUMP_ENC_NONE) in dumper_config_match()
1410 struct dumperinfo *di, *sdi; in dumper_remove() local
1426 TAILQ_FOREACH_SAFE(di, &dumper_configs, di_next, sdi) { in dumper_remove()
1436 if (!found && kda->kda_index == KDA_REMOVE) in dumper_remove()
1445 if (di->mediasize > 0 && length != 0 && (offset < di->mediaoffset || in dump_check_bounds()
1446 offset - di->mediaoffset + length > di->mediasize)) { in dump_check_bounds()
1447 if (di->kdcomp != NULL && offset >= di->mediaoffset) { in dump_check_bounds()
1455 (intmax_t)offset, (intmax_t)di->mediaoffset, in dump_check_bounds()
1456 (uintmax_t)length, (intmax_t)di->mediasize); in dump_check_bounds()
1459 if (length % di->blocksize != 0) { in dump_check_bounds()
1464 if (offset % di->blocksize != 0) { in dump_check_bounds()
1478 switch (kdc->kdc_encryption) { in dump_encrypt()
1480 if (rijndael_blockEncrypt(&kdc->kdc_ci, &kdc->kdc_ki, buf, in dump_encrypt()
1484 if (rijndael_cipherInit(&kdc->kdc_ci, MODE_CBC, in dump_encrypt()
1485 buf + size - 16 /* IV size for AES-256-CBC */) <= 0) { in dump_encrypt()
1490 chacha_encrypt_bytes(&kdc->kdc_chacha, buf, buf, size); in dump_encrypt()
1509 kdc = di->kdcrypto; in dump_encrypted_write()
1524 length -= nbytes; in dump_encrypted_write()
1540 if (length % di->blocksize != 0) { in kerneldumpcomp_write_cb()
1547 rlength = rounddown(length, di->blocksize); in kerneldumpcomp_write_cb()
1553 resid = length - rlength; in kerneldumpcomp_write_cb()
1554 memmove(di->blockbuf, (uint8_t *)base + rlength, resid); in kerneldumpcomp_write_cb()
1555 bzero((uint8_t *)di->blockbuf + resid, di->blocksize - resid); in kerneldumpcomp_write_cb()
1556 di->kdcomp->kdc_resid = resid; in kerneldumpcomp_write_cb()
1580 if (hdrsz > di->blocksize) in dump_write_headers()
1584 kdc = di->kdcrypto; in dump_write_headers()
1594 if (di->dumper_hdr != NULL) in dump_write_headers()
1595 return (di->dumper_hdr(di, kdh)); in dump_write_headers()
1597 if (hdrsz == di->blocksize) in dump_write_headers()
1600 buf = di->blockbuf; in dump_write_headers()
1601 memset(buf, 0, di->blocksize); in dump_write_headers()
1605 extent = dtoh64(kdh->dumpextent); in dump_write_headers()
1608 error = dump_write(di, kdc->kdc_dumpkey, in dump_write_headers()
1609 di->mediaoffset + di->mediasize - di->blocksize - extent - in dump_write_headers()
1617 di->mediaoffset + di->mediasize - 2 * di->blocksize - extent - in dump_write_headers()
1618 keysize, di->blocksize); in dump_write_headers()
1620 error = dump_write(di, buf, di->mediaoffset + di->mediasize - in dump_write_headers()
1621 di->blocksize, di->blocksize); in dump_write_headers()
1638 * +-----------+------+-----+----------------------------+------+
1640 * +-----------+------+-----+----------------------------+------+
1641 * 1 blk opt <------- dump extent --------> 1 blk
1664 kdc = di->kdcrypto; in dump_start()
1669 key = keysize > 0 ? kdc->kdc_dumpkey : NULL; in dump_start()
1676 if (di->dumper_start != NULL) { in dump_start()
1677 error = di->dumper_start(di, key, keysize); in dump_start()
1679 dumpextent = dtoh64(kdh->dumpextent); in dump_start()
1680 span = SIZEOF_METADATA + dumpextent + 2 * di->blocksize + in dump_start()
1682 if (di->mediasize < span) { in dump_start()
1683 if (di->kdcomp == NULL) in dump_start()
1694 dumpextent = di->mediasize - span + dumpextent; in dump_start()
1695 kdh->dumpextent = htod64(dumpextent); in dump_start()
1701 di->dumpoff = di->mediaoffset + di->mediasize - di->blocksize - in dump_start()
1704 di->origdumpoff = di->dumpoff; in dump_start()
1714 if (di->kdcrypto != NULL) in _dump_append()
1715 error = dump_encrypted_write(di, virtual, di->dumpoff, length); in _dump_append()
1718 error = dump_write(di, virtual, di->dumpoff, length); in _dump_append()
1720 di->dumpoff += length; in _dump_append()
1725 * Write to the dump device starting at dumpoff. When compression is enabled,
1734 if (di->kdcomp != NULL) { in dump_append()
1736 if (length > di->maxiosize) in dump_append()
1738 buf = di->kdcomp->kdc_buf; in dump_append()
1740 return (compressor_write(di->kdcomp->kdc_stream, buf, length)); in dump_append()
1756 return (di->dumper(di->priv, virtual, offset, length)); in dump_write()
1770 if (di->kdcomp != NULL) { in dump_finish()
1771 error = compressor_flush(di->kdcomp->kdc_stream); in dump_finish()
1773 /* We have residual data in di->blockbuf. */ in dump_finish()
1774 error = _dump_append(di, di->blockbuf, di->blocksize); in dump_finish()
1777 di->dumpoff -= di->blocksize - di->kdcomp->kdc_resid; in dump_finish()
1778 di->kdcomp->kdc_resid = 0; in dump_finish()
1787 kdh->dumplength = htod64(di->dumpoff - di->origdumpoff); in dump_finish()
1788 kdh->parity = 0; in dump_finish()
1789 kdh->parity = kerneldump_parity(kdh); in dump_finish()
1791 compressor_reset(di->kdcomp->kdc_stream); in dump_finish()
1809 strlcpy(kdh->magic, magic, sizeof(kdh->magic)); in dump_init_header()
1810 strlcpy(kdh->architecture, MACHINE_ARCH, sizeof(kdh->architecture)); in dump_init_header()
1811 kdh->version = htod32(KERNELDUMPVERSION); in dump_init_header()
1812 kdh->architectureversion = htod32(archver); in dump_init_header()
1813 kdh->dumplength = htod64(dumplen); in dump_init_header()
1814 kdh->dumpextent = kdh->dumplength; in dump_init_header()
1815 kdh->dumptime = htod64(time_second); in dump_init_header()
1817 kdh->dumpkeysize = htod32(kerneldumpcrypto_dumpkeysize(di->kdcrypto)); in dump_init_header()
1819 kdh->dumpkeysize = 0; in dump_init_header()
1821 kdh->blocksize = htod32(di->blocksize); in dump_init_header()
1822 strlcpy(kdh->hostname, prison0.pr_hostname, sizeof(kdh->hostname)); in dump_init_header()
1823 dstsize = sizeof(kdh->versionstring); in dump_init_header()
1824 if (strlcpy(kdh->versionstring, version, dstsize) >= dstsize) in dump_init_header()
1825 kdh->versionstring[dstsize - 2] = '\n'; in dump_init_header()
1827 strlcpy(kdh->panicstring, panicstr, sizeof(kdh->panicstring)); in dump_init_header()
1828 if (di->kdcomp != NULL) in dump_init_header()
1829 kdh->compression = di->kdcomp->kdc_format; in dump_init_header()
1830 kdh->parity = kerneldump_parity(kdh); in dump_init_header()