Re: [PATCH] mm: cma: fix stack corruption due to sprintf usage

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

 



On 08/11/2017 03:10 AM, Prakash Gupta wrote:
> name[] in cma_debugfs_add_one() can only accommodate 16 chars including
> NULL to store sprintf output.  It's common for cma device name to be larger
> than 15 chars. This can cause stack corrpution. If the gcc stack protector
> is turned on, this can cause a panic due to stack corruption.
> 
> Below is one example trace:
> 
> Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in:
> ffffff8e69a75730
> Call trace:
>   [<ffffff8e68289504>] dump_backtrace+0x0/0x2c4
>   [<ffffff8e682897e8>] show_stack+0x20/0x28
>   [<ffffff8e685ea808>] dump_stack+0xb8/0xf4
>   [<ffffff8e683c454c>] panic+0x154/0x2b0
>   [<ffffff8e682a724c>] print_tainted+0x0/0xc0
>   [<ffffff8e69a75730>] cma_debugfs_init+0x274/0x290
>   [<ffffff8e682839ec>] do_one_initcall+0x5c/0x168
>   [<ffffff8e69a50e24>] kernel_init_freeable+0x1c8/0x280
> 
> Fix the short sprintf buffer in cma_debugfs_add_one() by using scnprintf()
> instead of sprintf().
> 

Acked-by: Laura Abbott <labbott@xxxxxxxxxx>

> fixes: f318dd083c81 ("cma: Store a name in the cma structure")
> Signed-off-by: Prakash Gupta <guptap@xxxxxxxxxxxxxx>
> ---
>  mm/cma_debug.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/cma_debug.c b/mm/cma_debug.c
> index 595b757..c03ccbc 100644
> --- a/mm/cma_debug.c
> +++ b/mm/cma_debug.c
> @@ -167,7 +167,7 @@ static void cma_debugfs_add_one(struct cma *cma, int idx)
>  	char name[16];
>  	int u32s;
>  
> -	sprintf(name, "cma-%s", cma->name);
> +	scnprintf(name, sizeof(name), "cma-%s", cma->name);
>  
>  	tmp = debugfs_create_dir(name, cma_debugfs_root);
>  
> 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>



[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