int video_status = 0;
int ret;
FILE *video_fp = manager.fd.video;
- char stat[256];
+ char stat[MIDDLE_BUFFER + 1]; /* on changing this size, change fscanf params */
if (video_fp == NULL) // file is not open
return 0;
rewind(video_fp);
fflush(video_fp);
- ret = fscanf(video_fp, "%s", stat);
+ ret = fscanf(video_fp, "%" STR_VALUE(MIDDLE_BUFFER) "s", stat);
if (ret != EOF)
if(strncmp(stat,"active",6) == 0)
static void get_cpu_frequency(float *freqs)
{
char filename[MIDDLE_BUFFER];
- char freq_str[SMALL_BUFFER];
+ char freq_str[SMALL_BUFFER + 1]; /* on changing this size, change fscanf params */
FILE *f;
int cpu_n = 0;
LOGI_th_samp("core #%d diasabled\n", cpu_n);
freqs[cpu_n] = 0.0;
} else {
- /* core enabled, get frequency /*/
- if (fscanf(f, "%s", freq_str) != 1) {
+ /* core enabled, get frequency */
+ if (fscanf(f, "%" STR_VALUE(SMALL_BUFFER) "s", freq_str) != 1) {
/* TODO return error code */
freqs[cpu_n] = 0.0f;
LOGE("scan cpu #%d freq fail\n", cpu_n);
{
FILE *fp = manager.fd.networkstat;
uintmax_t irecv, isend;
- char ifname[64];
+ char ifname[SMALL_BUFFER + 1]; /* on changing this size, change fscanf params */
if (fp == NULL)
return;
*recv = *send = 0;
skip_lines(fp, 2); /* strip header */
- while (fscanf(fp, "%s", ifname) != EOF)
+ while (fscanf(fp, "%" STR_VALUE(SMALL_BUFFER) "s", ifname) != EOF)
if (strcmp("lo:", ifname)) {
if (fscanf(fp, "%" SCNuMAX, &irecv) <= 0)
goto scan_error;
manager.fd.diskstats = fopen("/proc/diskstats", "r");
}
+#define PARTITION_NAME_MAXLENGTH 128
static void get_disk_stat(uint32_t *reads, uint32_t *bytes_reads,
uint32_t *writes, uint32_t *bytes_writes)
{
- enum { partition_name_maxlength = 128 };
FILE *fp = manager.fd.diskstats;
- char master_partition[partition_name_maxlength] = { 0 };
+ char master_partition[PARTITION_NAME_MAXLENGTH + 1] = { 0 };/* on changing this size, change fscanf params */
uint32_t sector_size = 0;
*reads = *writes = 0;
fflush(fp);
while (!feof(fp)) {
- char partition[partition_name_maxlength];
+ char partition[PARTITION_NAME_MAXLENGTH + 1];/* on changing this size, change fscanf params */
uintmax_t preads, pwrites;
uintmax_t psec_read, psec_write;
if (skip_tokens(fp, 2) < 0)
goto exit;
- if (fscanf(fp, "%s", partition) != 1)
+ if (fscanf(fp, "%" STR_VALUE(PARTITION_NAME_MAXLENGTH) "s", partition) != 1)
goto scan_error;
if (*master_partition
&& !strncmp(master_partition, partition,
goto scan_error;
skip_tokens(fp, 4);
- memcpy(master_partition, partition,
- partition_name_maxlength);
+ memcpy(master_partition, partition, sizeof(partition));
/* get sector size */
sector_size = get_partition_sector_size(partition);
*fd = NULL;
}
-#define strr(x) #x
-#define str(x) strr(x)
-#define dtest_and_close(fd) do {LOGI("CLOSE " str(fd) "\n");test_and_close(fd);} while(0)
-#define dftest_and_close(fd) do {LOGI("CLOSE " str(fd) "\n");ftest_and_close(fd);} while(0)
+#define dtest_and_close(fd) do {LOGI("CLOSE " STR_VALUE(fd) "\n");test_and_close(fd);} while(0)
+#define dftest_and_close(fd) do {LOGI("CLOSE " STR_VALUE(fd) "\n");ftest_and_close(fd);} while(0)
void close_system_file_descriptors(void)
{
dtest_and_close(&manager.fd.brightness);
uint32_t reads, writes, bytes_reads, bytes_writes;
uint32_t recv, send;
- peek_disk_stat_diff(&reads, &writes, &bytes_reads, &bytes_writes);
+ peek_disk_stat_diff(&reads, &bytes_reads, &writes ,&bytes_writes);
peek_network_stat_diff(&recv, &send);
return 0;
continue;
} else if (log.type == MSG_IMAGE) {
/* need chsmak */
- char *file_name = log.data;
- LOGI("MSG_IMAGE> <%s>\n", file_name);
+ void *p = log.data;
+ char *file_name = p;
+
+ if (access(file_name, F_OK) != -1) {
+ LOGI("MSG_IMAGE> <%s>\n", file_name);
+ } else {
+ LOGE("MSG_IMAGE> File not found <%s>\n", file_name);
+ continue;
+ }
if (chsmack(file_name) == 0) {
/* exctract probe message */
- file_name += strnlen(file_name, PATH_MAX) + 1;
- struct msg_data_t *msg_data = (struct msg_data_t *)file_name;
+ p += strnlen(file_name, PATH_MAX) + 1;
+ struct msg_data_t *msg_data = (struct msg_data_t *)(p);
+
+ /* check packed size */
+ if (log.length != strnlen(file_name, PATH_MAX) + 1 +
+ sizeof(*msg_data) + msg_data->len) {
+ LOGE("Bad packed message\n");
+ continue;
+ }
+
if (write_to_buf(msg_data) != 0)
LOGE("write to buf fail\n");
} else {