Messages in this thread | | | Date | Wed, 21 Feb 2018 23:58:55 +0300 | From | Alexey Dobriyan <> | Subject | Re: [PATCH v2] proc: fix /proc/*/map_files lookup some more |
| |
On Wed, Feb 21, 2018 at 12:04:03PM -0800, Andrew Morton wrote: > On Wed, 21 Feb 2018 22:53:40 +0300 Alexey Dobriyan <adobriyan@gmail.com> wrote: > > > I totally forgot that _parse_integer() accepts arbitrary amount of > > leading zeroes leading to the following: > > > > OK > > # readlink /proc/1/map_files/56427ecba000-56427eddc000 > > /lib/systemd/systemd > > > > bogus > > # readlink /proc/1/map_files/00000000000056427ecba000-56427eddc000 > > /lib/systemd/systemd > > # readlink /proc/1/map_files/56427ecba000-00000000000056427eddc000 > > /lib/systemd/systemd > > > > ... > > > > --- a/fs/proc/base.c > > +++ b/fs/proc/base.c > > @@ -1916,6 +1916,8 @@ static int dname_to_vma_addr(struct dentry *dentry, > > unsigned long long sval, eval; > > unsigned int len; > > > > + if (str[0] == '0' && str[1]) > > + return -EINVAL; > > len = _parse_integer(str, 16, &sval); > > if (len & KSTRTOX_OVERFLOW) > > return -EINVAL; > > @@ -1927,6 +1929,8 @@ static int dname_to_vma_addr(struct dentry *dentry, > > return -EINVAL; > > str++; > > > > + if (str[0] == '0' && str[1]) > > + return -EINVAL; > > len = _parse_integer(str, 16, &eval); > > if (len & KSTRTOX_OVERFLOW) > > return -EINVAL; > > I don't know this code and I'm all confused. > > - why is the code designed to accept addresses of "0"?
Now I'm confused. Code rejects, say ,'07ff...-...' because printing with %lx-%lx would never produce leading zero.
> - how do we know that the first digit of a VMA address will never be 0?
Except when address is exactly 0 but this case is handled by looking at the second character.
| |