Re: [PATCH] binfmt_flat: Fix corruption when not offsetting data start

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

 



On 3/26/24 12:20, Stefan O'Rear wrote:
> Commit 04d82a6d0881 ("binfmt_flat: allow not offsetting data start")
> introduced a RISC-V specific variant of the FLAT format which does not
> allocate any space for the (obsolescent) array of shared library
> pointers. However, it did not disable the code which initializes the
> array, resulting in the corruption of sizeof(long) bytes before the DATA
> segment, generally the end of the TEXT segment.
> 
> Use CONFIG_BINFMT_FLAT_NO_DATA_START_OFFSET to guard initialization the

s/initialization the/the initialization of the

> shared library pointer region so that it will only be initialized if
> space is reserved for it.
> 
> Fixes: 04d82a6d0881 ("binfmt_flat: allow not offsetting data start")
> Signed-off-by: Stefan O'Rear <sorear@xxxxxxxxxxxx>
> Tested-by: Waldemar Brodkorb <wbx@xxxxxxxxxxx>

It feels like CONFIG_BINFMT_FLAT_NO_DATA_START_OFFSET is not a very good name...
Maybe something like CONFIG_BINFMT_FLAT_NO_SHARED_LIBRARY would be better. But
renaming can be done in a followup patch.

Reviewed-by: Damien Le Moal <dlemoal

> ---
>  fs/binfmt_flat.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c
> index c26545d71d39..70c2b68988f4 100644
> --- a/fs/binfmt_flat.c
> +++ b/fs/binfmt_flat.c
> @@ -879,6 +879,7 @@ static int load_flat_binary(struct linux_binprm *bprm)
>  	if (res < 0)
>  		return res;
>  
> +#ifndef CONFIG_BINFMT_FLAT_NO_DATA_START_OFFSET
>  	/* Update data segment pointers for all libraries */
>  	for (i = 0; i < MAX_SHARED_LIBS; i++) {
>  		if (!libinfo.lib_list[i].loaded)
> @@ -893,6 +894,7 @@ static int load_flat_binary(struct linux_binprm *bprm)
>  				return -EFAULT;
>  		}
>  	}
> +#endif
>  
>  	set_binfmt(&flat_format);
>  

-- 
Damien Le Moal
Western Digital Research





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux