for (i = 0; i < size; i++) {
- if (copy_from_user(&(event.scan_code), buf, 1)) {
+ if (copy_from_user(&(event.scan_code), buf + i, 1)) {
printk("Console Write fault\n");
return -EFAULT;
}
struct palacios_console * cons = priv_data;
int cons_fd = 0;
unsigned long flags;
+ int acquired = 0;
if (cons->open == 0) {
printk("Attempted to connect to unopened console\n");
}
spin_lock_irqsave(&(cons->lock), flags);
+ if (cons->connected == 0) {
+ cons->connected = 1;
+ acquired = 1;
+ }
+ spin_unlock_irqrestore(&(cons->lock), flags);
+
+ if (acquired == 0) {
+ printk("Console already connected\n");
+ return -1;
+ }
cons_fd = anon_inode_getfd("v3-cons", &cons_fops, cons, O_RDWR);
return cons_fd;
}
- cons->connected = 1;
-
v3_deliver_console_event(guest->v3_ctx, NULL);
- spin_unlock_irqrestore(&(cons->lock), flags);
+
printk("Console connected\n");