Skip to contentSkip to conversation

xen: don't continue xenstore initialization in case of errors

PATCH Superseded Stefano Stabellini 2 participants 3 messages Nov 12, 2021 – Nov 15, 2021

Subsystems (2)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

Stefano Stabellini

author maintainer
#0 lore raw

PATCH 1/1 xen: don't continue xenstore initialization in case of errors

From: Stefano Stabellini <[email protected]>

In case of errors in xenbus_init (e.g. missing xen_store_gfn parameter), we goto out_error but we forget to reset xen_store_domain_type to XS_UNKNOWN. As a consequence xenbus_probe_initcall and other initcalls will still try to initialize xenstore resulting into a crash at boot.

[    2.479830] Call trace:
[    2.482314]  xb_init_comms+0x18/0x150
[    2.486354]  xs_init+0x34/0x138
[    2.489786]  xenbus_probe+0x4c/0x70
[    2.498432]  xenbus_probe_initcall+0x2c/0x7c
[    2.503944]  do_one_initcall+0x54/0x1b8
[    2.507358]  kernel_init_freeable+0x1ac/0x210
[    2.511617]  kernel_init+0x28/0x130
[    2.516112]  ret_from_fork+0x10/0x20
---
 drivers/xen/xenbus/xenbus_probe.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/xen/xenbus/xenbus_probe.c +2 -0
index bd003ca8acbe..34abf2b5967b 100644
@@ -983,8 +983,10 @@ static int __init xenbus_init(void)
 	 */
 	proc_create_mount_point("xen");
 #endif
+	return err;
 
 out_error:
+	xen_store_domain_type = XS_UNKNOWN;
 	return err;
 }
 
Signature · 1 line
2.25.1
#1 lore raw

drivers/xen/xenbus/xenbus_probe.c static int __init xenbus_init(void) · line 986

Quoted 7 lines · Stefano Stabellini
drivers/xen/xenbus/xenbus_probe.c +1 -0
@@ -983,8 +983,10 @@ static int __init xenbus_init(void)
 	 */
 	proc_create_mount_point("xen");
 #endif
+	return err;

Personally I think such cases would better be "return 0". With that done here, err's initializer could (imo should) then also be dropped.

Jan

Quoted 6 lines
drivers/xen/xenbus/xenbus_probe.c +1 -0
 out_error:
+	xen_store_domain_type = XS_UNKNOWN;
 	return err;
 }
 
 
author maintainer
#2 lore raw
Quoted 12 lines · Jan Beulich

drivers/xen/xenbus/xenbus_probe.c static int __init xenbus_init(void) · line 986

Quoted 7 lines · Stefano Stabellini
drivers/xen/xenbus/xenbus_probe.c +1 -0
@@ -983,8 +983,10 @@ static int __init xenbus_init(void)
 	 */
 	proc_create_mount_point("xen");
 #endif
+	return err;

Personally I think such cases would better be "return 0". With that done here, err's initializer could (imo should) then also be dropped.

I'll make both changes in the next version

Quoted 7 lines
Quoted 6 lines
drivers/xen/xenbus/xenbus_probe.c +1 -0
 out_error:
+	xen_store_domain_type = XS_UNKNOWN;
 	return err;
 }