[PATCH] Fix libmount build under uClibc Taken from gentoo-hardened: http://git.overlays.gentoo.org/gitweb/?p=proj/hardened-dev.git;a=commit;h=91879751 For details, see https://bugs.gentoo.org/show_bug.cgi?id=406303 Signed-off-by: Peter Korsgaard diff -Naur util-linux-2.20.1.orig/libmount/src/tab_parse.c util-linux-2.20.1/libmount/src/tab_parse.c --- util-linux-2.20.1.orig/libmount/src/tab_parse.c 2011-12-12 20:51:06.646614964 -0500 +++ util-linux-2.20.1/libmount/src/tab_parse.c 2011-12-12 21:02:03.587865010 -0500 @@ -51,19 +51,21 @@ */ static int mnt_parse_table_line(struct libmnt_fs *fs, char *s) { - int rc, n = 0; - char *src, *fstype, *optstr; - - rc = sscanf(s, UL_SCNsA" " /* (1) source */ - UL_SCNsA" " /* (2) target */ - UL_SCNsA" " /* (3) FS type */ - UL_SCNsA" " /* (4) options */ + int rc, n = 0, len = strlen (s) + 1; + char *src = malloc (sizeof *src * len); + char *fstype = malloc (sizeof *fstype * len); + char *optstr = malloc (sizeof *optstr * len); + + rc = sscanf(s, "%s"" " /* (1) source */ + "%s"" " /* (2) target */ + "%s"" " /* (3) FS type */ + "%s"" " /* (4) options */ "%n", /* byte count */ - &src, - &fs->target, - &fstype, - &optstr, + src, + fs->target, + fstype, + optstr, &n); if (rc == 4) { @@ -108,16 +110,20 @@ */ static int mnt_parse_mountinfo_line(struct libmnt_fs *fs, char *s) { - int rc, end = 0; + int rc, end = 0, len = strlen (s) + 1; unsigned int maj, min; char *fstype, *src, *p; + fs->root = malloc (sizeof *fs->root * len); + fs->target = malloc (sizeof *fs->target * len); + fs->vfs_optstr = malloc (sizeof *fs->vfs_optstr * len); + rc = sscanf(s, "%u " /* (1) id */ "%u " /* (2) parent */ "%u:%u " /* (3) maj:min */ - UL_SCNsA" " /* (4) mountroot */ - UL_SCNsA" " /* (5) target */ - UL_SCNsA /* (6) vfs options (fs-independent) */ + "%s"" " /* (4) mountroot */ + "%s"" " /* (5) target */ + "%s" /* (6) vfs options (fs-independent) */ "%n", /* number of read bytes */ &fs->id, @@ -139,9 +145,14 @@ } s = p + 3; - rc += sscanf(s, UL_SCNsA" " /* (8) FS type */ - UL_SCNsA" " /* (9) source */ - UL_SCNsA, /* (10) fs options (fs specific) */ + len = strlen (s) + 1; + fstype = malloc (sizeof *fstype * len); + src = malloc (sizeof *src * len); + fs->fs_optstr = malloc (sizeof *fs->fs_optstr * len); + + rc += sscanf(s, "%s"" " /* (8) FS type */ + "%s"" " /* (9) source */ + "%s", /* (10) fs options (fs specific) */ &fstype, &src,