Variable sized arrays implemented this way may cause corruptions depending on how different compilers pack the structure. Signed-off-by: Allison Henderson <allison.henderson@xxxxxxxxxx> --- include/parent.h | 1 - io/parent.c | 9 ++++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/parent.h b/include/parent.h index f338f96..85cef85 100644 --- a/include/parent.h +++ b/include/parent.h @@ -22,7 +22,6 @@ typedef struct parent { __u64 p_ino; __u32 p_gen; __u16 p_reclen; - char p_name[1]; } parent_t; typedef struct parent_cursor { diff --git a/io/parent.c b/io/parent.c index 1968516..55b8b49 100644 --- a/io/parent.c +++ b/io/parent.c @@ -45,7 +45,8 @@ check_parent_entry(xfs_bstat_t *bstatp, parent_t *parent) struct stat statbuf; char *str; - sprintf(fullpath, _("%s%s"), mntpt, parent->p_name); + snprintf(fullpath, parent->p_reclen, _("%s%s"), mntpt, + ((char*)parent)+sizeof(struct parent)); sts = lstat(fullpath, &statbuf); if (sts != 0) { @@ -284,9 +285,11 @@ print_parent_entry(parent_t *parent, int fullpath) printf(_("p_gen = %u\n"), parent->p_gen); printf(_("p_reclen = %u\n"), parent->p_reclen); if (fullpath) - printf(_("p_name = \"%s%s\"\n"), mntpt, parent->p_name); + printf(_("p_name = \"%s%s\"\n"), mntpt, + ((char*)parent)+sizeof(struct parent)); else - printf(_("p_name = \"%s\"\n"), parent->p_name); + printf(_("p_name = \"%s\"\n"), + ((char*)parent)+sizeof(struct parent)); } static int -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html