diff options
author | Bruce Evans <bde@FreeBSD.org> | 2019-03-25 11:48:40 +0000 |
---|---|---|
committer | Bruce Evans <bde@FreeBSD.org> | 2019-03-25 11:48:40 +0000 |
commit | dac776fdbf62cb279966fc06c22e652fc4365343 (patch) | |
tree | 0f550b2b051ca9deadce2d93c2bd028aeecb9bc5 /lib/libvgl/simple.c | |
parent | 2de5b9042014fd174cce0ef47d4c1cfee83fbf32 (diff) | |
download | src-dac776fdbf62cb279966fc06c22e652fc4365343.tar.gz src-dac776fdbf62cb279966fc06c22e652fc4365343.zip |
Fix another type of buffer overrun for segmented modes. The buffer index
was not taken modulo the window size in VGLClear().
Segmented modes also need a kernel fix to almost work. The ioctl to set
the window origin is broken.
These bugs are rarely problems since non-VESA modes only need
segmentation to support multiple pages but libvgl doesn't support
multiple pages and treats these modes as non-segmented, and VESA modes
are usually mapped linearly except on old hardware so they really are
non-segmented.
Notes
Notes:
svn path=/head/; revision=345496
Diffstat (limited to 'lib/libvgl/simple.c')
-rw-r--r-- | lib/libvgl/simple.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/libvgl/simple.c b/lib/libvgl/simple.c index 0605bbadd2ba..070dad590edf 100644 --- a/lib/libvgl/simple.c +++ b/lib/libvgl/simple.c @@ -535,7 +535,8 @@ VGLClear(VGLBitmap *object, u_long color) VGLSetSegment(offset); len = min(total - offset, VGLAdpInfo.va_window_size); for (i = 0; i < len; i += object->PixelBytes) - bcopy(b, object->Bitmap + offset + i, object->PixelBytes); + bcopy(object->Bitmap + (offset + i) % VGLAdpInfo.va_window_size, b, + object->PixelBytes); offset += len; } break; |