Re: [PATCH 19/21] xfsprogs: Remove single byte array from struct parent

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, May 07, 2018 at 09:41:17PM -0700, Allison Henderson wrote:
> 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;

Two options here: Either we finally fix up this part of libhandle to
talk to the kernel ioctls (whether or not we use the new apis in the
'upper half' patch at the end of this series to provide that emulation)
or just deprecate and kill all this old parent pointer stuff since it
has never worked on Linux.

FWIW struct parent is an in-core structure exposed via libhandle so (a)
we can't change it and (b) the padding problems don't exist.

--D

>  
>  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
--
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



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux