range: prevents memory leak of file from HTTP2

If a HTTP2 transaction gets freed before the end of the range
request, we need to have the files container which is in
the state, to transfer owernship of this file to the files
container.

Ticket: 4811
pull/6629/head
Philippe Antoine 4 years ago committed by Victor Julien
parent 15649424a7
commit c023116857

@ -449,6 +449,23 @@ impl HTTP2State {
if tx.tx_id == tx_id + 1 {
found = true;
index = i;
// this should be in HTTP2Transaction::free
// but we need state's file container cf https://redmine.openinfosecfoundation.org/issues/4444
if !tx.file_range.is_null() {
match unsafe { SC } {
None => panic!("BUG no suricata_config"),
Some(c) => {
(c.HTPFileCloseHandleRange)(
&mut self.files.files_tc,
0,
tx.file_range,
std::ptr::null_mut(),
0,
);
(c.HttpRangeFreeBlock)(tx.file_range);
}
}
}
break;
}
}

@ -363,6 +363,7 @@ void HTPFileCloseHandleRange(FileContainer *files, const uint16_t flags, HttpRan
/* HtpState owns the constructed file now */
FileContainerAdd(files, ranged);
}
DEBUG_VALIDATE_BUG_ON(ranged && !files);
THashDataUnlock(c->container->hdata);
}
}

Loading…
Cancel
Save