| From 44fae478edb9d3fe62fb573a71db70b60bbe357f Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 28 Sep 2024 19:36:08 +0800 |
| Subject: printk: Fix signed integer overflow when defining LOG_BUF_LEN_MAX |
| |
| From: Kuan-Wei Chiu <visitorckw@gmail.com> |
| |
| [ Upstream commit 3d6f83df8ff2d5de84b50377e4f0d45e25311c7a ] |
| |
| Shifting 1 << 31 on a 32-bit int causes signed integer overflow, which |
| leads to undefined behavior. To prevent this, cast 1 to u32 before |
| performing the shift, ensuring well-defined behavior. |
| |
| This change explicitly avoids any potential overflow by ensuring that |
| the shift occurs on an unsigned 32-bit integer. |
| |
| Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com> |
| Acked-by: Petr Mladek <pmladek@suse.com> |
| Link: https://lore.kernel.org/r/20240928113608.1438087-1-visitorckw@gmail.com |
| Signed-off-by: Petr Mladek <pmladek@suse.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| kernel/printk/printk.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c |
| index 5a88134fba79f..c93beab96c860 100644 |
| --- a/kernel/printk/printk.c |
| +++ b/kernel/printk/printk.c |
| @@ -403,7 +403,7 @@ static struct latched_seq clear_seq = { |
| /* record buffer */ |
| #define LOG_ALIGN __alignof__(unsigned long) |
| #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT) |
| -#define LOG_BUF_LEN_MAX (u32)(1 << 31) |
| +#define LOG_BUF_LEN_MAX ((u32)1 << 31) |
| static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN); |
| static char *log_buf = __log_buf; |
| static u32 log_buf_len = __LOG_BUF_LEN; |
| -- |
| 2.39.5 |
| |