summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_shutdown.c
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2008-01-28 19:04:07 +0000
committerru <ru@FreeBSD.org>2008-01-28 19:04:07 +0000
commit910410640b71f7191c0274d5d3b0e0c0c9bbbcfd (patch)
tree24ae1ec0d6cc8d44c3bb559ec2e9d089bbcaed5c /sys/kern/kern_shutdown.c
parent2a2d8bde46c97ae60e359d207227f8a1c97e6b53 (diff)
downloadFreeBSD-src-910410640b71f7191c0274d5d3b0e0c0c9bbbcfd.zip
FreeBSD-src-910410640b71f7191c0274d5d3b0e0c0c9bbbcfd.tar.gz
Add a wrapper function that bound checks writes to the dump device.
Diffstat (limited to 'sys/kern/kern_shutdown.c')
-rw-r--r--sys/kern/kern_shutdown.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c
index c3de8c1f..732deb9 100644
--- a/sys/kern/kern_shutdown.c
+++ b/sys/kern/kern_shutdown.c
@@ -661,6 +661,20 @@ set_dumper(struct dumperinfo *di)
return (0);
}
+/* Call dumper with bounds checking. */
+int
+dump_write(struct dumperinfo *di, void *virtual, vm_offset_t physical,
+ off_t offset, size_t length)
+{
+
+ if (length != 0 && (offset < di->mediaoffset ||
+ offset - di->mediaoffset + length > di->mediasize)) {
+ printf("Attempt to write outside dump device boundaries.\n");
+ return (ENXIO);
+ }
+ return (di->dumper(di->priv, virtual, physical, offset, length));
+}
+
#if defined(__powerpc__)
void
dumpsys(struct dumperinfo *di __unused)
OpenPOWER on IntegriCloud