Message ID | 1524109641-45617-1-git-send-email-cofyc.jackson@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Apr 19, 2018 at 11:47:21AM +0800, Yecheng Fu wrote: > `libmount` from util-linux and many softwares in userspace (e.g. > kubelet) did not expect empty string as mount source: > > ``` > $ mount -t tmpfs "" /mnt/tmpfs > $ findmnt /mnt/tmpfs > findmnt: /proc/self/mountinfo: parse error at line 51 > $ cat /proc/self/mountinfo | grep -P '\/mnt\/tmpfs' > 74 25 0:59 / /mnt/tmpfs rw,relatime shared:38 - tmpfs rw > $ cat /proc/self/mounts | grep -P '\/mnt\/tmpfs' > /mnt/tmpfs tmpfs rw,relatime 0 0 > ``` > > `source` field in mounts/mountinfo is empty, which breaks a lot of > mounts/mountinfo parsers. > > This fixes issues in parsing when user uses empty string as mount > source. > > Cc: Karel Zak <kzak@redhat.com> > Signed-off-by: Yecheng Fu <cofyc.jackson@gmail.com> Reviewed-by: Matthew Wilcox <mawilcox@microsoft.com>
On Thu, Apr 19, 2018 at 04:32:56AM -0700, Matthew Wilcox wrote: > On Thu, Apr 19, 2018 at 11:47:21AM +0800, Yecheng Fu wrote: > > `libmount` from util-linux and many softwares in userspace (e.g. > > kubelet) did not expect empty string as mount source: > > > > ``` > > $ mount -t tmpfs "" /mnt/tmpfs > > $ findmnt /mnt/tmpfs > > findmnt: /proc/self/mountinfo: parse error at line 51 > > $ cat /proc/self/mountinfo | grep -P '\/mnt\/tmpfs' > > 74 25 0:59 / /mnt/tmpfs rw,relatime shared:38 - tmpfs rw > > $ cat /proc/self/mounts | grep -P '\/mnt\/tmpfs' > > /mnt/tmpfs tmpfs rw,relatime 0 0 > > ``` > > > > `source` field in mounts/mountinfo is empty, which breaks a lot of > > mounts/mountinfo parsers. > > > > This fixes issues in parsing when user uses empty string as mount > > source. > > > > Cc: Karel Zak <kzak@redhat.com> > > Signed-off-by: Yecheng Fu <cofyc.jackson@gmail.com> > > Reviewed-by: Matthew Wilcox <mawilcox@microsoft.com> hi, I'm a newbie here. Will this be merged or is there still something I need to do? I had submitted a patch to [util-linux](https://github.com/karelzak/util-linux/pull/619). Karel prefer kernel side bugfix than rewrite all the sscanf() stuff and I agree. Kernel side bugfix also fixes all parsers too.
On Tue, May 15, 2018 at 01:18:00PM +0800, Yecheng Fu wrote: > On Thu, Apr 19, 2018 at 04:32:56AM -0700, Matthew Wilcox wrote: > > On Thu, Apr 19, 2018 at 11:47:21AM +0800, Yecheng Fu wrote: > > > `libmount` from util-linux and many softwares in userspace (e.g. > > > kubelet) did not expect empty string as mount source: > > > > > > ``` > > > $ mount -t tmpfs "" /mnt/tmpfs > > > $ findmnt /mnt/tmpfs > > > findmnt: /proc/self/mountinfo: parse error at line 51 > > > $ cat /proc/self/mountinfo | grep -P '\/mnt\/tmpfs' > > > 74 25 0:59 / /mnt/tmpfs rw,relatime shared:38 - tmpfs rw > > > $ cat /proc/self/mounts | grep -P '\/mnt\/tmpfs' > > > /mnt/tmpfs tmpfs rw,relatime 0 0 > > > ``` > > > > > > `source` field in mounts/mountinfo is empty, which breaks a lot of > > > mounts/mountinfo parsers. > > > > > > This fixes issues in parsing when user uses empty string as mount > > > source. > > > > > > Cc: Karel Zak <kzak@redhat.com> > > > Signed-off-by: Yecheng Fu <cofyc.jackson@gmail.com> > > > > Reviewed-by: Matthew Wilcox <mawilcox@microsoft.com> > > hi, I'm a newbie here. Will this be merged or is there still something I > need to do? > > I had submitted a patch to [util-linux](https://github.com/karelzak/util-linux/pull/619). Karel prefer kernel side bugfix than rewrite all the sscanf() stuff and I agree. Kernel side bugfix also fixes all parsers too. > > -- > Yecheng Fu hi, didn't receive any updates for months, sorry to ping again in case someone missed it. Karel patched util-linux to work around this issue now [^1], but I hope this can be fixed on kernel side too to improve compatibility. [^1]: https://github.com/karelzak/util-linux/commit/18a52a5094f820b5da013daf5972eb8e65be9680
On Thu, Jul 12, 2018 at 10:29:50AM +0800, Yecheng Fu wrote: > On Tue, May 15, 2018 at 01:18:00PM +0800, Yecheng Fu wrote: > > On Thu, Apr 19, 2018 at 04:32:56AM -0700, Matthew Wilcox wrote: > > > On Thu, Apr 19, 2018 at 11:47:21AM +0800, Yecheng Fu wrote: > > > > `libmount` from util-linux and many softwares in userspace (e.g. > > > > kubelet) did not expect empty string as mount source: > > > > > > > > ``` > > > > $ mount -t tmpfs "" /mnt/tmpfs > > > > $ findmnt /mnt/tmpfs > > > > findmnt: /proc/self/mountinfo: parse error at line 51 > > > > $ cat /proc/self/mountinfo | grep -P '\/mnt\/tmpfs' > > > > 74 25 0:59 / /mnt/tmpfs rw,relatime shared:38 - tmpfs rw > > > > $ cat /proc/self/mounts | grep -P '\/mnt\/tmpfs' > > > > /mnt/tmpfs tmpfs rw,relatime 0 0 > > > > ``` > > > > > > > > `source` field in mounts/mountinfo is empty, which breaks a lot of > > > > mounts/mountinfo parsers. > > > > > > > > This fixes issues in parsing when user uses empty string as mount > > > > source. > > > > > > > > Cc: Karel Zak <kzak@redhat.com> > > > > Signed-off-by: Yecheng Fu <cofyc.jackson@gmail.com> > > > > > > Reviewed-by: Matthew Wilcox <mawilcox@microsoft.com> > > > > hi, I'm a newbie here. Will this be merged or is there still something I > > need to do? > > > > I had submitted a patch to [util-linux](https://github.com/karelzak/util-linux/pull/619). Karel prefer kernel side bugfix than rewrite all the sscanf() stuff and I agree. Kernel side bugfix also fixes all parsers too. > > > > -- > > Yecheng Fu > > hi, didn't receive any updates for months, sorry to ping again in case > someone missed it. > > Karel patched util-linux to work around this issue now [^1], but I hope this > can be fixed on kernel side too to improve compatibility. I agree. I'm absolutely sure that in userspace are many many another places where nobody expects empty mount source in /proc/self/mountinfo. It would be really nice to use there "none" as placeholder. Karel
diff --git a/fs/proc_namespace.c b/fs/proc_namespace.c index 3f1190d..24591b8 100644 --- a/fs/proc_namespace.c +++ b/fs/proc_namespace.c @@ -104,7 +104,7 @@ static int show_vfsmnt(struct seq_file *m, struct vfsmount *mnt) if (err) goto out; } else { - mangle(m, r->mnt_devname ? r->mnt_devname : "none"); + mangle(m, (r->mnt_devname && r->mnt_devname[0] != '\0') ? r->mnt_devname : "none"); } seq_putc(m, ' '); /* mountpoints outside of chroot jail will give SEQ_SKIP on this */ @@ -174,7 +174,7 @@ static int show_mountinfo(struct seq_file *m, struct vfsmount *mnt) if (err) goto out; } else { - mangle(m, r->mnt_devname ? r->mnt_devname : "none"); + mangle(m, (r->mnt_devname && r->mnt_devname[0] != '\0') ? r->mnt_devname : "none"); } seq_puts(m, sb->s_flags & MS_RDONLY ? " ro" : " rw"); err = show_sb_opts(m, sb); @@ -202,7 +202,7 @@ static int show_vfsstat(struct seq_file *m, struct vfsmount *mnt) if (err) goto out; } else { - if (r->mnt_devname) { + if (r->mnt_devname && r->mnt_devname[0] != '\0') { seq_puts(m, "device "); mangle(m, r->mnt_devname); } else
`libmount` from util-linux and many softwares in userspace (e.g. kubelet) did not expect empty string as mount source: ``` $ mount -t tmpfs "" /mnt/tmpfs $ findmnt /mnt/tmpfs findmnt: /proc/self/mountinfo: parse error at line 51 $ cat /proc/self/mountinfo | grep -P '\/mnt\/tmpfs' 74 25 0:59 / /mnt/tmpfs rw,relatime shared:38 - tmpfs rw $ cat /proc/self/mounts | grep -P '\/mnt\/tmpfs' /mnt/tmpfs tmpfs rw,relatime 0 0 ``` `source` field in mounts/mountinfo is empty, which breaks a lot of mounts/mountinfo parsers. This fixes issues in parsing when user uses empty string as mount source. Cc: Karel Zak <kzak@redhat.com> Signed-off-by: Yecheng Fu <cofyc.jackson@gmail.com> --- PATCH v2 updates `show_vfsstat()` too. fs/proc_namespace.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)