Skip to content

Commit 788cad3

Browse files
committed
DiskIO (Linux): fix possible segfault
1 parent f6ccbf7 commit 788cad3

File tree

1 file changed

+13
-16
lines changed

1 file changed

+13
-16
lines changed

src/detection/diskio/diskio_linux.c

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,23 @@ const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options)
3737
if (!ffPathExists(pathSysBlock, FF_PATHTYPE_DIRECTORY))
3838
continue;
3939

40-
FFDiskIOResult* device = (FFDiskIOResult*) ffListAdd(result);
41-
ffStrbufInit(&device->name);
40+
FF_STRBUF_AUTO_DESTROY name = ffStrbufCreate();
4241

4342
{
4443
snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s/device/vendor", devName);
45-
if (ffAppendFileBuffer(pathSysBlock, &device->name))
44+
if (ffAppendFileBuffer(pathSysBlock, &name))
4645
{
47-
ffStrbufTrimRightSpace(&device->name);
48-
if (device->name.length > 0)
49-
ffStrbufAppendC(&device->name, ' ');
46+
ffStrbufTrimRightSpace(&name);
47+
if (name.length > 0)
48+
ffStrbufAppendC(&name, ' ');
5049
}
5150

5251
snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s/device/model", devName);
53-
ffAppendFileBuffer(pathSysBlock, &device->name);
54-
ffStrbufTrimRightSpace(&device->name);
52+
ffAppendFileBuffer(pathSysBlock, &name);
53+
ffStrbufTrimRightSpace(&name);
5554

56-
if (device->name.length == 0)
57-
ffStrbufSetS(&device->name, devName);
55+
if (name.length == 0)
56+
ffStrbufSetS(&name, devName);
5857
else if (ffStrStartsWith(devName, "nvme"))
5958
{
6059
int devid, nsid;
@@ -69,17 +68,13 @@ const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options)
6968
if (multiNs)
7069
{
7170
// In Asahi Linux, there are multiple namespaces for the same NVMe drive.
72-
ffStrbufAppendF(&device->name, " - %d", nsid);
71+
ffStrbufAppendF(&name, " - %d", nsid);
7372
}
7473
}
7574
}
7675

77-
if (options->namePrefix.length && !ffStrbufStartsWith(&device->name, &options->namePrefix))
78-
{
79-
ffStrbufDestroy(&device->name);
80-
result->length--;
76+
if (options->namePrefix.length && !ffStrbufStartsWith(&name, &options->namePrefix))
8177
continue;
82-
}
8378
}
8479

8580
// I/Os merges sectors ticks ...
@@ -94,6 +89,8 @@ const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options)
9489
continue;
9590
}
9691

92+
FFDiskIOResult* device = (FFDiskIOResult*) ffListAdd(result);
93+
ffStrbufInitMove(&device->name, &name);
9794
ffStrbufInitF(&device->devPath, "/dev/%s", devName);
9895
device->bytesRead = sectorRead * 512;
9996
device->bytesWritten = sectorWritten * 512;

0 commit comments

Comments
 (0)