--- Gnu-Mach/i386/i386at/kd_event.c 2020/09/02 04:36:58 1.1 +++ Gnu-Mach/i386/i386at/kd_event.c 2020/09/02 04:42:06 1.1.1.2 @@ -185,6 +185,11 @@ io_return_t kbdgetstat(dev, flavor, data *data = KB_VANILLAKB; *count = 1; break; + case DEV_GET_SIZE: + data[DEV_GET_SIZE_DEVICE_SIZE] = 0; + data[DEV_GET_SIZE_RECORD_SIZE] = sizeof(kd_event); + *count = DEV_GET_SIZE_COUNT; + break; default: return (D_INVALID_OPERATION); } @@ -307,6 +312,10 @@ kbdread(dev, ior) register int err, count; register spl_t s; + /* Check if IO_COUNT is a multiple of the record size. */ + if (ior->io_count % sizeof(kd_event) != 0) + return D_INVALID_SIZE; + err = device_read_alloc(ior, (vm_size_t)ior->io_count); if (err != KERN_SUCCESS) return (err);