PCI/VGA: Pass vga_get_uninterruptible() errors to userspace

If VGA routing cannot be established, vga_get_uninterruptible() returns an
error and does not increment the lock count. Return the error to the
caller.

Return before incrementing uc->io_cnt/mem_cnt so vga_arb_release() won't
call vga_put() when userspace closes the handle.

Signed-off-by: Simon Richter <Simon.Richter@hogyros.de>
[bhelgaas: commit log]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://patch.msgid.link/20260307173538.763188-2-Simon.Richter@hogyros.de
This commit is contained in:
Simon Richter 2026-03-08 02:35:34 +09:00 committed by Bjorn Helgaas
parent 6de23f81a5
commit 2a93c9851b

View File

@ -1134,6 +1134,7 @@ static ssize_t vga_arb_write(struct file *file, const char __user *buf,
char kbuf[64], *curr_pos;
size_t remaining = count;
int err;
int ret_val;
int i;
@ -1165,7 +1166,11 @@ static ssize_t vga_arb_write(struct file *file, const char __user *buf,
goto done;
}
vga_get_uninterruptible(pdev, io_state);
err = vga_get_uninterruptible(pdev, io_state);
if (err) {
ret_val = err;
goto done;
}
/* Update the client's locks lists */
for (i = 0; i < MAX_USER_CARDS; i++) {