From 8fb76c3cfd5c54cb0d8713436d480a8062217d5c Mon Sep 17 00:00:00 2001
From: David Lin <dtwlin@google.com>
Date: Wed, 8 Jun 2016 09:39:00 +0200
Subject: [PATCH] greybus: svc: pwrmon: validate svc protocol op status when
 getting rail names

AP should check for Greybus SVC Protocol Operation Status to determine if the
operation was successfully completed by the SVC

Testing Done:
- Successfully getting the rail names in the pwrmon_dummy sandbox branch

Signed-off-by: David Lin <dtwlin@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
---
 drivers/staging/greybus/greybus_protocols.h |  1 +
 drivers/staging/greybus/svc.c               | 10 +++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/greybus/greybus_protocols.h b/drivers/staging/greybus/greybus_protocols.h
index 8125fb7140d84..3c6415fd8647a 100644
--- a/drivers/staging/greybus/greybus_protocols.h
+++ b/drivers/staging/greybus/greybus_protocols.h
@@ -1145,6 +1145,7 @@ struct gb_svc_pwrmon_rail_count_get_response {
 #define GB_SVC_PWRMON_RAIL_NAME_BUFSIZE		32
 
 struct gb_svc_pwrmon_rail_names_get_response {
+	__u8	status;
 	__u8	name[0][GB_SVC_PWRMON_RAIL_NAME_BUFSIZE];
 } __packed;
 
diff --git a/drivers/staging/greybus/svc.c b/drivers/staging/greybus/svc.c
index bfdd0ce376238..e2ab94277b4e8 100644
--- a/drivers/staging/greybus/svc.c
+++ b/drivers/staging/greybus/svc.c
@@ -135,6 +135,13 @@ static int gb_svc_pwrmon_rail_names_get(struct gb_svc *svc,
 		return ret;
 	}
 
+	if (response->status != GB_SVC_OP_SUCCESS) {
+		dev_err(&svc->dev,
+			"SVC error while getting rail names: %u\n",
+			response->status);
+		return -EREMOTEIO;
+	}
+
 	return 0;
 }
 
@@ -778,7 +785,8 @@ static void gb_svc_pwrmon_debugfs_init(struct gb_svc *svc)
 	if (!rail_count || rail_count > GB_SVC_PWRMON_MAX_RAIL_COUNT)
 		goto err_pwrmon_debugfs;
 
-	bufsize = GB_SVC_PWRMON_RAIL_NAME_BUFSIZE * rail_count;
+	bufsize = sizeof(*rail_names) +
+		GB_SVC_PWRMON_RAIL_NAME_BUFSIZE * rail_count;
 
 	rail_names = kzalloc(bufsize, GFP_KERNEL);
 	if (!rail_names)
-- 
2.30.2