net/procfs: fix runtime error AddressSanitizer(global-buffer-overflow)

NuttShell (NSH) NuttX-10.3.0
ap> ifconfig
=================================================================
Program received signal SIGSEGV, Segmentation fault.
==3920365==ERROR: AddressSanitizer: global-buffer-overflow on address 0x57fb4f2a at pc 0x57177067 bp 0xf1ffebb8 sp 0xf1ffeba8
READ of size 1 at 0x57fb4f2a thread T0

...................
| #10 0xf7ac4339 in __asan::__asan_report_load1 (addr=1476087594) at ../../../../../src/libsanitizer/asan/asan_rtl.cpp:117
| #11 0x57177067 in strncmp (cs=0x57fb4f2a "", ct=0x582d36e0 "stat", nb=4) at string/lib_strncmp.c:40
| #12 0x57f3b467 in netprocfs_opendir (relpath=0x57fb4f26 "net", dir=0xf1ffed80) at procfs/net_procfs.c:398
| #13 0x572b3ae1 in procfs_opendir (mountpt=0xf4602c20, relpath=0x57fb4f26 "net", dir=0xf1ffed80) at procfs/fs_procfs.c:625
| #14 0x572879ff in open_mountpoint (inode=0xf4602c20, relpath=0x57fb4f26 "net", dir=0xf1ffed80) at vfs/fs_dir.c:127
...................

Signed-off-by: chao an <anchao@xiaomi.com>
This commit is contained in:
chao an 2022-09-26 23:12:32 +08:00 committed by Xiang Xiao
parent 5e46a9908a
commit 98724477e7
1 changed files with 13 additions and 10 deletions

View File

@ -393,6 +393,8 @@ static int netprocfs_opendir(FAR const char *relpath,
/* Subdirectory ? */
if (strlen(relpath) > 4)
{
for (i = 0; i < ARRAY_SIZE(g_net_entries); i++)
{
if (strncmp(relpath + 4, g_net_entries[i].name,
@ -408,6 +410,7 @@ static int netprocfs_opendir(FAR const char *relpath,
break;
}
}
/* Assume that path refers to the 1st level subdirectory. Allocate the
* level1 the dirent structure before checking.