mdopen: fix gcc 8.1 string overflow error
We already cut symlinks longer than 1000, so rely on this calling readlink and error out if we are able to read more than 1000 bytes. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
This commit is contained in:
parent
9758983959
commit
c1b78589cf
8
mdopen.c
8
mdopen.c
|
@ -44,7 +44,7 @@ void make_parts(char *dev, int cnt)
|
||||||
int nlen = strlen(dev) + 20;
|
int nlen = strlen(dev) + 20;
|
||||||
char *name;
|
char *name;
|
||||||
int dig = isdigit(dev[strlen(dev)-1]);
|
int dig = isdigit(dev[strlen(dev)-1]);
|
||||||
char orig[1024];
|
char orig[1001];
|
||||||
char sym[1024];
|
char sym[1024];
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -58,8 +58,10 @@ void make_parts(char *dev, int cnt)
|
||||||
minor_num = minor(stb.st_rdev);
|
minor_num = minor(stb.st_rdev);
|
||||||
odig = -1;
|
odig = -1;
|
||||||
} else if (S_ISLNK(stb.st_mode)) {
|
} else if (S_ISLNK(stb.st_mode)) {
|
||||||
int len = readlink(dev, orig, sizeof(orig));
|
int len;
|
||||||
if (len < 0 || len > 1000)
|
|
||||||
|
len = readlink(dev, orig, sizeof(orig));
|
||||||
|
if (len < 0 || len >= (int)sizeof(orig))
|
||||||
return;
|
return;
|
||||||
orig[len] = 0;
|
orig[len] = 0;
|
||||||
odig = isdigit(orig[len-1]);
|
odig = isdigit(orig[len-1]);
|
||||||
|
|
Loading…
Reference in New Issue