From: Jack Lange Date: Thu, 18 Nov 2010 19:18:16 +0000 (-0600) Subject: paranoid check X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=ae0883d9d6ce5f746eefbbee1bbcf4a188dbfb8e;p=palacios.git paranoid check --- diff --git a/palacios/src/devices/keyboard.c b/palacios/src/devices/keyboard.c index 375a625..554e9d1 100644 --- a/palacios/src/devices/keyboard.c +++ b/palacios/src/devices/keyboard.c @@ -266,7 +266,7 @@ static int push_to_output_queue(struct vm_device * dev, uint8_t value, uint8_t c q = &(state->kbd_queue); } - if (q->count == QUEUE_SIZE) { + if (q->count >= QUEUE_SIZE) { return 0; } @@ -276,7 +276,14 @@ static int push_to_output_queue(struct vm_device * dev, uint8_t value, uint8_t c state->status.cmd = 0; } - q->queue[q->end++] = value; + q->queue[q->end] = value; + + if (q->end >= (QUEUE_SIZE - 1)) { + q->end = 0; + } else { + q->end++; + } + q->count++; @@ -304,7 +311,14 @@ static int pull_from_output_queue(struct vm_device * dev, uint8_t * value) { return 0; } - *value = q->queue[q->start++]; + *value = q->queue[q->start]; + + if (q->start >= (QUEUE_SIZE - 1)) { + q->start = 0; + } else { + q->start++; + } + q->count--; @@ -1021,6 +1035,8 @@ static int keyboard_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { keyboard_state = (struct keyboard_internal *)V3_Malloc(sizeof(struct keyboard_internal)); + memset(keyboard_state, 0, sizeof(struct keyboard_internal)); + keyboard_state->mouse_queue.start = 0; keyboard_state->mouse_queue.end = 0; keyboard_state->mouse_queue.count = 0;