xen/console: introduce console input permission

Add new flag to domain structure for marking permission to intercept
the physical console input by the domain.

Update console input switch logic accordingly.

No functional change intended.

Signed-off-by: Denis Mukhin <dmukhin@ford.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
Denis Mukhin authored and Stefano Stabellini committed 2025-06-04 14:24:26 -07:00
1 parent 82dc405bc1
commit c2dddce4b9
5 files changed
+29 -2

No files matched your search

+1
View File
@@ -713,6 +713,7 @@ int domain_vpl011_init(struct domain *d, struct vpl011_init_info *info)
}
else
{
d->console.input_allowed = true;
vpl011->backend_in_domain = false;
vpl011->backend.xen = xzalloc(struct vpl011_xen_backend);
+2
View File
@@ -238,6 +238,8 @@ void __init pv_shim_setup_dom(struct domain *d, l4_pgentry_t *l4start,
* guest from depleting the shim memory pool.
*/
d->max_pages = domain_tot_pages(d);
d->console.input_allowed = true;
}
static void write_start_info(struct domain *d)
+2
View File
@@ -831,6 +831,8 @@ struct domain *domain_create(domid_t domid,
flags |= CDF_hardware;
if ( old_hwdom )
old_hwdom->cdf &= ~CDF_hardware;
d->console.input_allowed = true;
}
/* Holding CDF_* internal flags. */
+17 -1
View File
@@ -512,9 +512,21 @@ static unsigned int __read_mostly console_rx = 0;
struct domain *console_get_domain(void)
{
struct domain *d;
if ( console_rx == 0 )
return NULL;
return rcu_lock_domain_by_id(console_rx - 1);
d = rcu_lock_domain_by_id(console_rx - 1);
if ( !d )
return NULL;
if ( d->console.input_allowed )
return d;
rcu_unlock_domain(d);
return NULL;
}
void console_put_domain(struct domain *d)
@@ -551,6 +563,10 @@ static void console_switch_input(void)
if ( d )
{
rcu_unlock_domain(d);
if ( !d->console.input_allowed )
continue;
console_rx = next_rx;
printk("*** Serial input to DOM%u", domid);
break;
+7 -1
View File
@@ -512,7 +512,7 @@ struct domain
bool auto_node_affinity;
/* Is this guest fully privileged (aka dom0)? */
bool is_privileged;
/* Can this guest access the Xen console? */
/* XSM: permission to use HYPERCALL_console_io hypercall */
bool is_console;
/* Is this guest being debugged by dom0? */
bool debugger_attached;
@@ -651,6 +651,12 @@ struct domain
unsigned int num_llc_colors;
const unsigned int *llc_colors;
#endif
/* Console settings. */
struct {
/* Permission to take ownership of the physical console input. */
bool input_allowed;
} console;
} __aligned(PAGE_SIZE);
static inline struct page_list_head *page_to_list(
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.