diff --git a/src/detection/physicaldisk/physicaldisk.h b/src/detection/physicaldisk/physicaldisk.h index eea569d2a..e3889ea6a 100644 --- a/src/detection/physicaldisk/physicaldisk.h +++ b/src/detection/physicaldisk/physicaldisk.h @@ -10,6 +10,8 @@ typedef enum FFPhysicalDiskType FF_PHYSICALDISK_TYPE_FIXED = 1 << 2, FF_PHYSICALDISK_TYPE_REMOVABLE = 1 << 3, + + FF_PHYSICALDISK_TYPE_READONLY = 1 << 2, } FFPhysicalDiskType; typedef struct FFPhysicalDiskResult diff --git a/src/detection/physicaldisk/physicaldisk_linux.c b/src/detection/physicaldisk/physicaldisk_linux.c index 1081e24b7..3eaa74ce9 100644 --- a/src/detection/physicaldisk/physicaldisk_linux.c +++ b/src/detection/physicaldisk/physicaldisk_linux.c @@ -109,6 +109,13 @@ const char* ffDetectPhysicalDisk(FFlist* result, FFPhysicalDiskOptions* options) device->type |= removableChar == '1' ? FF_PHYSICALDISK_TYPE_REMOVABLE : FF_PHYSICALDISK_TYPE_FIXED; } + { + char roChar = '0'; + snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s/ro", devName); + if (ffReadFileData(pathSysBlock, 1, &roChar) > 0) + device->type |= roChar == '1' ? FF_PHYSICALDISK_TYPE_READONLY : 0; + } + { ffStrbufInit(&device->serial); snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s/device/serial", devName);