ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/libs/sysfsutils/patches/200-mnt_path_check.patch b/package/libs/sysfsutils/patches/200-mnt_path_check.patch
new file mode 100644
index 0000000..8710578
--- /dev/null
+++ b/package/libs/sysfsutils/patches/200-mnt_path_check.patch
@@ -0,0 +1,55 @@
+--- a/lib/sysfs_utils.c
++++ b/lib/sysfs_utils.c
+@@ -22,6 +22,7 @@
+  */
+ #include "libsysfs.h"
+ #include "sysfs.h"
++#include <mntent.h>
+ 
+ /**
+  * sysfs_remove_trailing_slash: Removes any trailing '/' in the given path
+@@ -53,6 +54,9 @@ int sysfs_get_mnt_path(char *mnt_path, s
+ {
+ 	static char sysfs_path[SYSFS_PATH_MAX] = "";
+ 	const char *sysfs_path_env;
++	FILE *mnt;
++	struct mntent *mntent;
++	int ret;
+ 
+ 	if (len == 0 || mnt_path == NULL)
+ 		return -1;
+@@ -64,12 +68,31 @@ int sysfs_get_mnt_path(char *mnt_path, s
+ 		if (sysfs_path_env != NULL) {
+ 			safestrcpymax(mnt_path, sysfs_path_env, len);
+ 			sysfs_remove_trailing_slash(mnt_path);
+-			return 0;
++		} else {
++			safestrcpymax(mnt_path, SYSFS_MNT_PATH, len);
+ 		}
+-		safestrcpymax(mnt_path, SYSFS_MNT_PATH, len);
+ 	}
+ 
+-	return 0;
++	/* check that mount point is indeed mounted */
++	ret = -1;
++	if ((mnt = setmntent(SYSFS_PROC_MNTS, "r")) == NULL) {
++		dprintf("Error getting mount information\n");
++		return -1;
++	}
++	while ((mntent = getmntent(mnt)) != NULL) {
++		if (strcmp(mntent->mnt_type, SYSFS_FSTYPE_NAME) == 0 &&
++			strcmp(mntent->mnt_dir, mnt_path) == 0) {
++			ret = 0;
++			break;
++		}
++	}
++	
++	endmntent(mnt);
++
++	if (ret < 0)
++		errno = ENOENT;
++
++	return ret;
+ }
+ 
+ /**