| From foo@baz Wed Aug 22 09:42:09 CEST 2018 |
| From: Zhouyang Jia <jiazhouyang09@gmail.com> |
| Date: Fri, 15 Jun 2018 07:34:52 +0800 |
| Subject: xen: add error handling for xenbus_printf |
| |
| From: Zhouyang Jia <jiazhouyang09@gmail.com> |
| |
| [ Upstream commit 84c029a73327cef571eaa61c7d6e67e8031b52ec ] |
| |
| When xenbus_printf fails, the lack of error-handling code may |
| cause unexpected results. |
| |
| This patch adds error-handling code after calling xenbus_printf. |
| |
| Signed-off-by: Zhouyang Jia <jiazhouyang09@gmail.com> |
| Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| Signed-off-by: Juergen Gross <jgross@suse.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/xen/manage.c | 18 +++++++++++++++--- |
| 1 file changed, 15 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/xen/manage.c |
| +++ b/drivers/xen/manage.c |
| @@ -291,8 +291,15 @@ static void sysrq_handler(struct xenbus_ |
| return; |
| } |
| |
| - if (sysrq_key != '\0') |
| - xenbus_printf(xbt, "control", "sysrq", "%c", '\0'); |
| + if (sysrq_key != '\0') { |
| + err = xenbus_printf(xbt, "control", "sysrq", "%c", '\0'); |
| + if (err) { |
| + pr_err("%s: Error %d writing sysrq in control/sysrq\n", |
| + __func__, err); |
| + xenbus_transaction_end(xbt, 1); |
| + return; |
| + } |
| + } |
| |
| err = xenbus_transaction_end(xbt, 0); |
| if (err == -EAGAIN) |
| @@ -344,7 +351,12 @@ static int setup_shutdown_watcher(void) |
| continue; |
| snprintf(node, FEATURE_PATH_SIZE, "feature-%s", |
| shutdown_handlers[idx].command); |
| - xenbus_printf(XBT_NIL, "control", node, "%u", 1); |
| + err = xenbus_printf(XBT_NIL, "control", node, "%u", 1); |
| + if (err) { |
| + pr_err("%s: Error %d writing %s\n", __func__, |
| + err, node); |
| + return err; |
| + } |
| } |
| |
| return 0; |