summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2016-03-21 15:48:36 +0100
committerPeter Rajnoha <prajnoha@redhat.com>2016-03-21 15:50:32 +0100
commit8fad9b9e5d219861fc1f758216fb446cffe3817f (patch)
treee05d9cb31bf959545ccf1c060d4827e06ba4bc04
parentca7bac53cf0b3b64bdfa375085fc1535589ab1eb (diff)
downloadlvm2-8fad9b9e5d219861fc1f758216fb446cffe3817f.tar.gz
dev: be safer when reading sysfs properties
Check if the value we read from sysfs is not blank and replace the '\n' at the end only when needed ('\n' should usually be there for sysfs values, but better check this).
-rw-r--r--lib/device/dev-cache.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/device/dev-cache.c b/lib/device/dev-cache.c
index 490cec3d6..d912dea88 100644
--- a/lib/device/dev-cache.c
+++ b/lib/device/dev-cache.c
@@ -365,6 +365,7 @@ static int _add_alias(struct device *dev, const char *path)
static int _get_sysfs_value(const char *path, char *buf, size_t buf_size)
{
FILE *fp;
+ size_t len;
if (!(fp = fopen(path, "r"))) {
log_sys_error("fopen", path);
@@ -378,7 +379,13 @@ static int _get_sysfs_value(const char *path, char *buf, size_t buf_size)
return 0;
}
- buf[strlen(buf) - 1] = '\0';
+ if (!(len = strlen(buf))) {
+ log_error("_get_sysfs_value: %s: no value", path);
+ return 0;
+ }
+
+ if (buf[len - 1] == '\n')
+ buf[len - 1] = '\0';
if (fclose(fp))
log_sys_error("fclose", path);