summaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
authorKees Cook <keescook@chromium.org>2018-05-07 16:47:02 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-04-28 12:05:47 +0200
commit5a6d3197d0cc0cd8751726ca3332e97af3bf334e (patch)
treeddd8009cbeaf0053bedb44e91b854f47a6161bb3 /drivers/md
parentf517d00b37d1d0840c7cb91500210f3eade982e6 (diff)
downloadlinux-stable-5a6d3197d0cc0cd8751726ca3332e97af3bf334e.tar.gz
linux-stable-5a6d3197d0cc0cd8751726ca3332e97af3bf334e.tar.bz2
linux-stable-5a6d3197d0cc0cd8751726ca3332e97af3bf334e.zip
overflow.h: Add allocation size calculation helpers
commit 610b15c50e86eb1e4b77274fabcaea29ac72d6a8 upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/dm-table.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 7ee520d4d216..9da3ff8a07cc 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -516,14 +516,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;
@@ -531,8 +531,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);