Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion components/drivers/pic/pic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1198,7 +1198,7 @@ static int list_irq(int argc, char**argv)
_pic_name_max, "PIC",
12, "Mode",
#ifdef RT_USING_SMP
RT_CPUS_NR, "CPUs",
rt_max(RT_CPUS_NR, 4), "CPUs",
Copy link

Copilot AI Dec 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Title Format / PR 标题格式

English: PR title should follow lowercase format [module][subsystem] according to RT-Thread guidelines. Current title uses uppercase [DM/PIC], but should be [drivers][pic] or [pic] in lowercase.

中文:根据 RT-Thread 指南,PR 标题应遵循小写格式 [模块][子系统]。当前标题使用大写 [DM/PIC],应改为小写的 [drivers][pic][pic]

Suggested title / 建议标题:

[drivers][pic] Fixup SMP CPU mask list when CPU < 4

or

[pic] Fix SMP CPU mask buffer display for systems with less than 4 CPUs

Copilot generated this review using guidance from repository custom instructions.
#else
0, 0,
#endif
Expand Down Expand Up @@ -1254,6 +1254,10 @@ static int list_irq(int argc, char**argv)

rt_kputs(info);
#ifdef RT_USING_SMP
if (RT_CPUS_NR < 4)
{
rt_memset(&cpumask[RT_CPUS_NR], ' ', 4 - RT_CPUS_NR);
}
Comment on lines +1257 to +1260
Copy link

Copilot AI Dec 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Buffer Overflow Risk / 缓冲区溢出风险

English: This code will cause a buffer overflow when RT_CPUS_NR < 4. The cpumask buffer is declared on line 1183 with size RT_CPUS_NR + 1. When RT_CPUS_NR = 2, for example, the buffer has only 3 bytes (indices 0, 1, 2), but this code writes to cpumask[2] and cpumask[3], accessing out-of-bounds memory.

中文:当 RT_CPUS_NR < 4 时,此代码会导致缓冲区溢出。cpumask 缓冲区在第 1183 行声明,大小为 RT_CPUS_NR + 1。例如,当 RT_CPUS_NR = 2 时,缓冲区只有 3 字节(索引 0、1、2),但此代码会写入 cpumask[2]cpumask[3],访问越界内存。

Solution / 解决方案:

Change the buffer declaration to accommodate the minimum display width:

static char cpumask[rt_max(RT_CPUS_NR, 4) + 1] = { [rt_max(RT_CPUS_NR, 4)] = '\0' };

Or use a fixed size buffer:

static char cpumask[5] = { [4] = '\0' };  // 4 chars + null terminator

Copilot uses AI. Check for mistakes.
rt_kputs(cpumask);
#endif

Expand Down