summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1994-09-27 01:50:07 +0000
committerache <ache@FreeBSD.org>1994-09-27 01:50:07 +0000
commit9a50506be21f7810ce5e0f5fbd506fe396ded066 (patch)
tree3f91bd605e9e56793bf8e89c78eda43bca99e48c /sys
parent8802e34cc831f8f35c861ec16b46456240d76fe4 (diff)
downloadFreeBSD-src-9a50506be21f7810ce5e0f5fbd506fe396ded066.zip
FreeBSD-src-9a50506be21f7810ce5e0f5fbd506fe396ded066.tar.gz
Refuse text mode switching when proper font not loaded
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/syscons/syscons.c22
-rw-r--r--sys/i386/isa/syscons.c22
-rw-r--r--sys/isa/syscons.c22
3 files changed, 60 insertions, 6 deletions
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c
index 68e50f7..0be135f 100644
--- a/sys/dev/syscons/syscons.c
+++ b/sys/dev/syscons/syscons.c
@@ -34,7 +34,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: syscons.c,v 1.55 1994/09/24 21:29:38 ache Exp $
+ * $Id: syscons.c,v 1.56 1994/09/25 02:06:51 ache Exp $
*/
#include "sc.h"
@@ -591,7 +591,25 @@ pcioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
if (!crtc_vga)
return ENXIO;
- scp->mode = cmd & 0xFF;
+ cmd &= 0xFF;
+ i = cmd < M_VGA_C80x50 ?
+ *(video_mode_ptr + (cmd*64) + 2) : 0x08;
+ switch (i) {
+ default:
+ case 0x08:
+ if (!(fonts_loaded & FONT_8_LOADED))
+ return EINVAL;
+ break;
+ case 0x0E:
+ if (!(fonts_loaded & FONT_14_LOADED))
+ return EINVAL;
+ break;
+ case 0x10:
+ if (!(fonts_loaded & FONT_16_LOADED))
+ return EINVAL;
+ break;
+ }
+ scp->mode = cmd;
scp->status &= ~UNKNOWN_MODE; /* text mode */
if (scp->mode < M_VGA_C80x50) {
scp->xsize = *(video_mode_ptr + (scp->mode*64));
diff --git a/sys/i386/isa/syscons.c b/sys/i386/isa/syscons.c
index 68e50f7..0be135f 100644
--- a/sys/i386/isa/syscons.c
+++ b/sys/i386/isa/syscons.c
@@ -34,7 +34,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: syscons.c,v 1.55 1994/09/24 21:29:38 ache Exp $
+ * $Id: syscons.c,v 1.56 1994/09/25 02:06:51 ache Exp $
*/
#include "sc.h"
@@ -591,7 +591,25 @@ pcioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
if (!crtc_vga)
return ENXIO;
- scp->mode = cmd & 0xFF;
+ cmd &= 0xFF;
+ i = cmd < M_VGA_C80x50 ?
+ *(video_mode_ptr + (cmd*64) + 2) : 0x08;
+ switch (i) {
+ default:
+ case 0x08:
+ if (!(fonts_loaded & FONT_8_LOADED))
+ return EINVAL;
+ break;
+ case 0x0E:
+ if (!(fonts_loaded & FONT_14_LOADED))
+ return EINVAL;
+ break;
+ case 0x10:
+ if (!(fonts_loaded & FONT_16_LOADED))
+ return EINVAL;
+ break;
+ }
+ scp->mode = cmd;
scp->status &= ~UNKNOWN_MODE; /* text mode */
if (scp->mode < M_VGA_C80x50) {
scp->xsize = *(video_mode_ptr + (scp->mode*64));
diff --git a/sys/isa/syscons.c b/sys/isa/syscons.c
index 68e50f7..0be135f 100644
--- a/sys/isa/syscons.c
+++ b/sys/isa/syscons.c
@@ -34,7 +34,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: syscons.c,v 1.55 1994/09/24 21:29:38 ache Exp $
+ * $Id: syscons.c,v 1.56 1994/09/25 02:06:51 ache Exp $
*/
#include "sc.h"
@@ -591,7 +591,25 @@ pcioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
if (!crtc_vga)
return ENXIO;
- scp->mode = cmd & 0xFF;
+ cmd &= 0xFF;
+ i = cmd < M_VGA_C80x50 ?
+ *(video_mode_ptr + (cmd*64) + 2) : 0x08;
+ switch (i) {
+ default:
+ case 0x08:
+ if (!(fonts_loaded & FONT_8_LOADED))
+ return EINVAL;
+ break;
+ case 0x0E:
+ if (!(fonts_loaded & FONT_14_LOADED))
+ return EINVAL;
+ break;
+ case 0x10:
+ if (!(fonts_loaded & FONT_16_LOADED))
+ return EINVAL;
+ break;
+ }
+ scp->mode = cmd;
scp->status &= ~UNKNOWN_MODE; /* text mode */
if (scp->mode < M_VGA_C80x50) {
scp->xsize = *(video_mode_ptr + (scp->mode*64));
OpenPOWER on IntegriCloud