--- a/src/ubi.c
+++ b/src/ubi.c
@@ -84,9 +84,8 @@ static void ubi_submit(const char *dev_n
   plugin_dispatch_values(&vl);
 } /* void ubi_submit */
 
-static int ubi_read_dev_attr(const char *dev_name, const char *attr) {
+static int ubi_read_dev_attr(const char *dev_name, const char *attr, int *value) {
   FILE *f;
-  int val;
   char
       str[sizeof(SYS_PATH) + strlen(dev_name) + sizeof("/") + strlen(attr) + 1];
   int n;
@@ -98,7 +97,7 @@ static int ubi_read_dev_attr(const char
     return -1;
   }
 
-  n = fscanf(f, "%d", &val);
+  n = fscanf(f, "%d", value);
   fclose(f);
 
   if (n != 1) {
@@ -106,17 +105,39 @@ static int ubi_read_dev_attr(const char
     return -1;
   }
 
-  ubi_submit(dev_name, attr, (gauge_t)val);
-
   return 0;
 } /* int ubi_read_dev_attr */
 
 static inline int ubi_read_dev_bad_count(const char *dev_name) {
-  return ubi_read_dev_attr(dev_name, DEV_BAD_COUNT);
+  int ret;
+  int value;
+
+  ret = ubi_read_dev_attr(dev_name, DEV_BAD_COUNT, &value);
+
+  if (ret != 0) {
+    ERROR(PLUGIN_NAME " : Unable to read bat_peb_count");
+    return -1;
+  }
+
+  ubi_submit(dev_name, DEV_BAD_COUNT, (gauge_t)value);
+
+  return 0;
 } /* int ubi_read_dev_bad_count */
 
 static inline int ubi_read_max_ec(const char *dev_name) {
-  return ubi_read_dev_attr(dev_name, MAXIMUM_ERASE);
+  int ret;
+  int value;
+
+  ret = ubi_read_dev_attr(dev_name, MAXIMUM_ERASE, &value);
+
+  if (ret != 0) {
+    ERROR(PLUGIN_NAME " : Unable to read max_ec");
+    return -1;
+  }
+
+  ubi_submit(dev_name, MAXIMUM_ERASE, (gauge_t)value);
+
+  return 0;
 } /* int ubi_read_max_ec */
 
 static int ubi_read(void) {
