2023-05-28 16:31:50

by Christophe JAILLET

[permalink] [raw]
Subject: [PATCH 1/2] binfmt: Use struct_size()

Use struct_size() instead of hand-writing it. It is less verbose, more
robust and more informative.

Signed-off-by: Christophe JAILLET <[email protected]>
---
Compile tested on arm
---
fs/binfmt_elf_fdpic.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c
index d76ad3d4f676..237ce388d06d 100644
--- a/fs/binfmt_elf_fdpic.c
+++ b/fs/binfmt_elf_fdpic.c
@@ -748,7 +748,6 @@ static int elf_fdpic_map_file(struct elf_fdpic_params *params,
struct elf32_phdr *phdr;
unsigned long load_addr, stop;
unsigned nloads, tmp;
- size_t size;
int loop, ret;

/* allocate a load map table */
@@ -760,8 +759,7 @@ static int elf_fdpic_map_file(struct elf_fdpic_params *params,
if (nloads == 0)
return -ELIBBAD;

- size = sizeof(*loadmap) + nloads * sizeof(*seg);
- loadmap = kzalloc(size, GFP_KERNEL);
+ loadmap = kzalloc(struct_size(loadmap, segs, nloads), GFP_KERNEL);
if (!loadmap)
return -ENOMEM;

--
2.34.1



2023-05-28 16:48:13

by Eric W. Biederman

[permalink] [raw]
Subject: Re: [PATCH 1/2] binfmt: Use struct_size()

Christophe JAILLET <[email protected]> writes:

> Use struct_size() instead of hand-writing it. It is less verbose, more
> robust and more informative.

Acked-by: "Eric W. Biederman" <[email protected]>
Obviously correct transform.

>
> Signed-off-by: Christophe JAILLET <[email protected]>
> ---
> Compile tested on arm
> ---
> fs/binfmt_elf_fdpic.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c
> index d76ad3d4f676..237ce388d06d 100644
> --- a/fs/binfmt_elf_fdpic.c
> +++ b/fs/binfmt_elf_fdpic.c
> @@ -748,7 +748,6 @@ static int elf_fdpic_map_file(struct elf_fdpic_params *params,
> struct elf32_phdr *phdr;
> unsigned long load_addr, stop;
> unsigned nloads, tmp;
> - size_t size;
> int loop, ret;
>
> /* allocate a load map table */
> @@ -760,8 +759,7 @@ static int elf_fdpic_map_file(struct elf_fdpic_params *params,
> if (nloads == 0)
> return -ELIBBAD;
>
> - size = sizeof(*loadmap) + nloads * sizeof(*seg);
> - loadmap = kzalloc(size, GFP_KERNEL);
> + loadmap = kzalloc(struct_size(loadmap, segs, nloads), GFP_KERNEL);
> if (!loadmap)
> return -ENOMEM;

2023-05-30 23:18:11

by Kees Cook

[permalink] [raw]
Subject: Re: [PATCH 1/2] binfmt: Use struct_size()

On Sun, 28 May 2023 18:20:24 +0200, Christophe JAILLET wrote:
> Use struct_size() instead of hand-writing it. It is less verbose, more
> robust and more informative.
>
>

Applied to for-next/execve, thanks!

[1/2] binfmt: Use struct_size()
https://git.kernel.org/kees/c/e6302d5a285b
[2/2] binfmt: Slightly simplify elf_fdpic_map_file()
https://git.kernel.org/kees/c/36650a357eac

--
Kees Cook