Commit 0ea923f4 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Miquel Raynal

mtdchar: mark bits of ioctl handler noinline

The addition of the mtdchar_read_ioctl() function caused the stack usage
of mtdchar_ioctl() to grow beyond the warning limit on 32-bit architectures
with gcc-13:

drivers/mtd/mtdchar.c: In function 'mtdchar_ioctl':
drivers/mtd/mtdchar.c:1229:1: error: the frame size of 1488 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]

Mark both the read and write portions as noinline_for_stack to ensure
they don't get inlined and use separate stack slots to reduce the
maximum usage, both in the mtdchar_ioctl() and combined with any
of its callees.

Fixes: 095bb6e4 ("mtdchar: add MEMREAD ioctl")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Reviewed-by: default avatarRichard Weinberger <richard@nod.at>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20230417205654.1982368-1-arnd@kernel.org
parent 444c17cf
...@@ -590,8 +590,8 @@ static void adjust_oob_length(struct mtd_info *mtd, uint64_t start, ...@@ -590,8 +590,8 @@ static void adjust_oob_length(struct mtd_info *mtd, uint64_t start,
(end_page - start_page + 1) * oob_per_page); (end_page - start_page + 1) * oob_per_page);
} }
static int mtdchar_write_ioctl(struct mtd_info *mtd, static noinline_for_stack int
struct mtd_write_req __user *argp) mtdchar_write_ioctl(struct mtd_info *mtd, struct mtd_write_req __user *argp)
{ {
struct mtd_info *master = mtd_get_master(mtd); struct mtd_info *master = mtd_get_master(mtd);
struct mtd_write_req req; struct mtd_write_req req;
...@@ -688,8 +688,8 @@ static int mtdchar_write_ioctl(struct mtd_info *mtd, ...@@ -688,8 +688,8 @@ static int mtdchar_write_ioctl(struct mtd_info *mtd,
return ret; return ret;
} }
static int mtdchar_read_ioctl(struct mtd_info *mtd, static noinline_for_stack int
struct mtd_read_req __user *argp) mtdchar_read_ioctl(struct mtd_info *mtd, struct mtd_read_req __user *argp)
{ {
struct mtd_info *master = mtd_get_master(mtd); struct mtd_info *master = mtd_get_master(mtd);
struct mtd_read_req req; struct mtd_read_req req;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment