MCPcopy Create free account
hub / github.com/F-Stack/f-stack / dump_write_headers

Function dump_write_headers

freebsd/kern/kern_shutdown.c:1485–1543  ·  view source on GitHub ↗

* Write kernel dump headers at the beginning and end of the dump extent. * Write the kernel dump encryption key after the leading header if we were * configured to do so. */

Source from the content-addressed store, hash-verified

1483 * configured to do so.
1484 */
1485static int
1486dump_write_headers(struct dumperinfo *di, struct kerneldumpheader *kdh)
1487{
1488#ifdef EKCD
1489 struct kerneldumpcrypto *kdc;
1490#endif
1491 void *buf, *key;
1492 size_t hdrsz;
1493 uint64_t extent;
1494 uint32_t keysize;
1495 int error;
1496
1497 hdrsz = sizeof(*kdh);
1498 if (hdrsz > di->blocksize)
1499 return (ENOMEM);
1500
1501#ifdef EKCD
1502 kdc = di->kdcrypto;
1503 key = kdc->kdc_dumpkey;
1504 keysize = kerneldumpcrypto_dumpkeysize(kdc);
1505#else
1506 key = NULL;
1507 keysize = 0;
1508#endif
1509
1510 /*
1511 * If the dump device has special handling for headers, let it take care
1512 * of writing them out.
1513 */
1514 if (di->dumper_hdr != NULL)
1515 return (di->dumper_hdr(di, kdh, key, keysize));
1516
1517 if (hdrsz == di->blocksize)
1518 buf = kdh;
1519 else {
1520 buf = di->blockbuf;
1521 memset(buf, 0, di->blocksize);
1522 memcpy(buf, kdh, hdrsz);
1523 }
1524
1525 extent = dtoh64(kdh->dumpextent);
1526#ifdef EKCD
1527 if (kdc != NULL) {
1528 error = dump_write(di, kdc->kdc_dumpkey, 0,
1529 di->mediaoffset + di->mediasize - di->blocksize - extent -
1530 keysize, keysize);
1531 if (error != 0)
1532 return (error);
1533 }
1534#endif
1535
1536 error = dump_write(di, buf, 0,
1537 di->mediaoffset + di->mediasize - 2 * di->blocksize - extent -
1538 keysize, di->blocksize);
1539 if (error == 0)
1540 error = dump_write(di, buf, 0, di->mediaoffset + di->mediasize -
1541 di->blocksize, di->blocksize);
1542 return (error);

Callers 1

dump_finishFunction · 0.85

Calls 4

memsetFunction · 0.85
dump_writeFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected