diff options
author | ru <ru@FreeBSD.org> | 2008-01-28 19:04:07 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2008-01-28 19:04:07 +0000 |
commit | 910410640b71f7191c0274d5d3b0e0c0c9bbbcfd (patch) | |
tree | 24ae1ec0d6cc8d44c3bb559ec2e9d089bbcaed5c /sys/kern/kern_shutdown.c | |
parent | 2a2d8bde46c97ae60e359d207227f8a1c97e6b53 (diff) | |
download | FreeBSD-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.c | 14 |
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) |