diff options
author | Kees Cook <keescook@chromium.org> | 2018-05-07 16:47:02 -0700 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2018-06-05 12:16:51 -0700 |
commit | 610b15c50e86eb1e4b77274fabcaea29ac72d6a8 (patch) | |
tree | d2cc1abd8221f8b83a46331f0a3814b03482d783 /drivers/md | |
parent | 8fee81aa4598484c073c845281a25d94fb204cf6 (diff) | |
download | linux-610b15c50e86eb1e4b77274fabcaea29ac72d6a8.tar.gz linux-610b15c50e86eb1e4b77274fabcaea29ac72d6a8.tar.bz2 linux-610b15c50e86eb1e4b77274fabcaea29ac72d6a8.zip |
overflow.h: Add allocation size calculation helpers
In preparation for replacing unchecked overflows for memory allocations,
this creates helpers for the 3 most common calculations:
array_size(a, b): 2-dimensional array
array3_size(a, b, c): 3-dimensional array
struct_size(ptr, member, n): struct followed by n-many trailing members
Each of these return SIZE_MAX on overflow instead of wrapping around.
(Additionally renames a variable named "array_size" to avoid future
collision.)
Co-developed-by: Matthew Wilcox <mawilcox@microsoft.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/dm-table.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 0589a4da12bb..caa51dd351b6 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -548,14 +548,14 @@ static int adjoin(struct dm_table *table, struct dm_target *ti) * On the other hand, dm-switch needs to process bulk data using messages and * excessive use of GFP_NOIO could cause trouble. */ -static char **realloc_argv(unsigned *array_size, char **old_argv) +static char **realloc_argv(unsigned *size, char **old_argv) { char **argv; unsigned new_size; gfp_t gfp; - if (*array_size) { - new_size = *array_size * 2; + if (*size) { + new_size = *size * 2; gfp = GFP_KERNEL; } else { new_size = 8; @@ -563,8 +563,8 @@ static char **realloc_argv(unsigned *array_size, char **old_argv) } argv = kmalloc(new_size * sizeof(*argv), gfp); if (argv) { - memcpy(argv, old_argv, *array_size * sizeof(*argv)); - *array_size = new_size; + memcpy(argv, old_argv, *size * sizeof(*argv)); + *size = new_size; } kfree(old_argv); |