@@ -85,7 +85,7 @@ LogWriterFile::~LogWriterFile()
85
85
}
86
86
87
87
#if defined(PX4_CRYPTO)
88
- bool LogWriterFile::init_logfile_encryption (const char *filename )
88
+ bool LogWriterFile::init_logfile_encryption (const LogType type )
89
89
{
90
90
if (_algorithm == CRYPTO_NONE) {
91
91
_min_blocksize = 1 ;
@@ -148,16 +148,16 @@ bool LogWriterFile::init_logfile_encryption(const char *filename)
148
148
149
149
rsa_crypto.close ();
150
150
151
- // Write the encrypted key to the disk
152
- int key_fd = :: open (( const char *)filename, O_CREAT | O_WRONLY | O_DIRECT | O_SYNC, PX4_O_MODE_666 );
151
+ // Write the encrypted key to the beginning of the opened log file
152
+ int key_fd = _buffers[( int )type]. fd ( );
153
153
154
154
if (key_fd < 0 ) {
155
- PX4_ERR (" Can't open key file , errno: %d" , errno);
155
+ PX4_ERR (" Log file not open for storing the key , errno: %d" , errno);
156
156
free (key);
157
157
return false ;
158
158
}
159
159
160
- // write the header to the combined key exchange & cipherdata file
160
+ // write header and key to the beginning of the log file
161
161
struct ulog_key_header_s keyfile_header = {
162
162
.magic = {' U' , ' L' , ' o' , ' g' , ' E' , ' n' , ' c' },
163
163
.hdr_ver = 1 ,
@@ -168,20 +168,14 @@ bool LogWriterFile::init_logfile_encryption(const char *filename)
168
168
.initdata_size = (uint16_t )nonce_size
169
169
};
170
170
171
- size_t hdr_sz = ::write (key_fd, (uint8_t *)&keyfile_header, sizeof (keyfile_header));
172
- size_t written = 0 ;
173
-
174
- if (hdr_sz == sizeof (keyfile_header)) {
175
- // Header write succeeded, write the key
176
- written = ::write (key_fd, key, key_size + nonce_size);
177
- }
171
+ size_t written = ::write (key_fd, (uint8_t *)&keyfile_header, sizeof (keyfile_header));
172
+ written += ::write (key_fd, key, key_size + nonce_size);
178
173
179
174
// Free temporary memory allocations
180
175
free (key);
181
- ::close (key_fd);
182
176
183
177
// Check that writing to the disk succeeded
184
- if (written != key_size + nonce_size) {
178
+ if (written != sizeof (keyfile_header) + key_size + nonce_size) {
185
179
PX4_ERR (" Writing the encryption key to disk fail" );
186
180
return false ;
187
181
}
@@ -217,18 +211,21 @@ void LogWriterFile::start_log(LogType type, const char *filename)
217
211
}
218
212
}
219
213
220
- #if PX4_CRYPTO
221
- bool enc_init = init_logfile_encryption (filename);
214
+ if (_buffers[(int )type].start_log (filename)) {
222
215
223
- if (!enc_init) {
224
- PX4_ERR (" Failed to start encrypted logging" );
225
- _crypto.close ();
226
- return ;
227
- }
216
+ #if PX4_CRYPTO
217
+ bool enc_init = init_logfile_encryption (type);
218
+
219
+ if (!enc_init) {
220
+ PX4_ERR (" Failed to start encrypted logging" );
221
+ _crypto.close ();
222
+ _buffers[(int )type]._should_run = false ;
223
+ _buffers[(int )type].close_file ();
224
+ return ;
225
+ }
228
226
229
227
#endif
230
228
231
- if (_buffers[(int )type].start_log (filename)) {
232
229
PX4_INFO (" Opened %s log file: %s" , log_type_str (type), filename);
233
230
notify ();
234
231
}
@@ -630,11 +627,7 @@ size_t LogWriterFile::LogFileBuffer::get_read_ptr(void **ptr, bool *is_part)
630
627
631
628
bool LogWriterFile::LogFileBuffer::start_log (const char *filename)
632
629
{
633
- #if defined(PX4_CRYPTO)
634
- _fd = ::open (filename, O_APPEND | O_WRONLY, PX4_O_MODE_666);
635
- #else
636
630
_fd = ::open (filename, O_CREAT | O_WRONLY, PX4_O_MODE_666);
637
- #endif
638
631
639
632
if (_fd < 0 ) {
640
633
PX4_ERR (" Can't open log file %s, errno: %d" , filename, errno);
0 commit comments