@@ -234,7 +234,8 @@ uint32_t scap_fd_info_len(scap_fdinfo *fdi)
234234 break ;
235235 case SCAP_FD_FILE_V2 :
236236 res += sizeof (uint32_t ) + // open_flags
237- (uint32_t )strnlen (fdi -> info .regularinfo .fname , SCAP_MAX_PATH_SIZE ) + 2 ;
237+ (uint32_t )strnlen (fdi -> info .regularinfo .fname , SCAP_MAX_PATH_SIZE ) + 2 +
238+ sizeof (uint32_t ); // dev
238239 break ;
239240 case SCAP_FD_FIFO :
240241 case SCAP_FD_FILE :
@@ -343,6 +344,11 @@ int32_t scap_fd_write_to_disk(scap_t *handle, scap_fdinfo *fdi, scap_dumper_t *d
343344 snprintf (handle -> m_lasterr , SCAP_LASTERR_SIZE , "error writing to file (fi1)" );
344345 return SCAP_FAILURE ;
345346 }
347+ if (scap_dump_write (d , & (fdi -> info .regularinfo .dev ), sizeof (uint32_t )) != sizeof (uint32_t ))
348+ {
349+ snprintf (handle -> m_lasterr , SCAP_LASTERR_SIZE , "error writing to file (dev)" );
350+ return SCAP_FAILURE ;
351+ }
346352 break ;
347353 case SCAP_FD_FIFO :
348354 case SCAP_FD_FILE :
@@ -516,6 +522,16 @@ uint32_t scap_fd_read_from_disk(scap_t *handle, OUT scap_fdinfo *fdi, OUT size_t
516522
517523 (* nbytes ) += sizeof (uint32_t );
518524 res = scap_fd_read_fname_from_disk (handle , fdi -> info .regularinfo .fname , nbytes , f );
525+ if (sub_len && (* nbytes + sizeof (uint32_t )) > sub_len )
526+ {
527+ break ;
528+ }
529+ if (gzread (f , & (fdi -> info .regularinfo .dev ), sizeof (uint32_t )) != sizeof (uint32_t ))
530+ {
531+ snprintf (handle -> m_lasterr , SCAP_LASTERR_SIZE , "error reading the fd info from file (dev)" );
532+ return SCAP_FAILURE ;
533+ }
534+ (* nbytes ) += sizeof (uint32_t );
519535 break ;
520536 case SCAP_FD_FIFO :
521537 case SCAP_FD_FILE :
0 commit comments