Skip to content

Commit

Permalink
common/blkdev: use realpath instead of readlink to resolve the recurs…
Browse files Browse the repository at this point in the history
…ion symbol link

Signed-off-by: Xinze Chi <xinze@xsky.com>
  • Loading branch information
XinzeChi committed Dec 13, 2016
1 parent 96cf8a1 commit 0d1e9aa
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions src/common/blkdev.cc
Expand Up @@ -65,21 +65,23 @@ int get_block_device_base(const char *dev, char *out, size_t out_len)
struct stat st;
int r = 0;
DIR *dir;
char devname[PATH_MAX], fn[PATH_MAX];
char devname[PATH_MAX] = {0}, fn[PATH_MAX] = {0};
char *p;
char realname[PATH_MAX] = {0};

if (strncmp(dev, "/dev/", 5) != 0) {
if ((readlink(dev, realname, sizeof(realname)) == -1) || (strncmp(realname, "/dev/", 5) != 0))
if (realpath(dev, realname) == NULL || (strncmp(realname, "/dev/", 5) != 0)) {
return -EINVAL;
}
}

if (strlen(realname))
strncpy(devname, realname + 5, PATH_MAX -1);
strncpy(devname, realname + 5, PATH_MAX - 5);
else
strncpy(devname, dev + 5, PATH_MAX-1);
strncpy(devname, dev + 5, strlen(dev) - 5);

devname[PATH_MAX - 1] = '\0';

devname[PATH_MAX-1] = '\0';
for (p = devname; *p; ++p)
if (*p == '/')
*p = '!';
Expand Down

0 comments on commit 0d1e9aa

Please sign in to comment.