Skip to content

Commit 0020af3

Browse files
trflynn89gmta
authored andcommitted
RequestServer: Do not pack the disk cache header and footer structures
This is causing misaligned reads with Address Sanitizer enabled. We could maintain the packed attribute, and deal with alignment - but we ended up not actually needing these to be packed anyways. The only thing we need to know is the serialized size of the header, which we can just determine differently.
1 parent 71f9c77 commit 0020af3

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

Services/RequestServer/Cache/CacheEntry.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,14 @@ ErrorOr<NonnullOwnPtr<CacheEntryReader>> CacheEntryReader::create(DiskCache& dis
194194
auto fd = file->fd();
195195

196196
CacheHeader cache_header;
197+
size_t cache_header_size { 0 };
197198

198199
String url;
199200
Optional<String> reason_phrase;
200201

201202
auto result = [&]() -> ErrorOr<void> {
202203
cache_header = TRY(file->read_value<CacheHeader>());
204+
cache_header_size = TRY(file->tell());
203205

204206
if (cache_header.magic != CacheHeader::CACHE_MAGIC)
205207
return Error::from_string_literal("Magic value mismatch");
@@ -224,7 +226,7 @@ ErrorOr<NonnullOwnPtr<CacheEntryReader>> CacheEntryReader::create(DiskCache& dis
224226
return result.release_error();
225227
}
226228

227-
auto data_offset = sizeof(CacheHeader) + cache_header.url_size + cache_header.reason_phrase_size;
229+
auto data_offset = cache_header_size + cache_header.url_size + cache_header.reason_phrase_size;
228230

229231
return adopt_own(*new CacheEntryReader { disk_cache, index, cache_key, move(url), move(path), move(file), fd, cache_header, move(reason_phrase), move(response_headers), data_offset, data_size });
230232
}

Services/RequestServer/Cache/CacheEntry.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
namespace RequestServer {
2020

21-
struct [[gnu::packed]] CacheHeader {
21+
struct CacheHeader {
2222
static ErrorOr<CacheHeader> read_from_stream(Stream&);
2323
ErrorOr<void> write_to_stream(Stream&) const;
2424

@@ -35,7 +35,7 @@ struct [[gnu::packed]] CacheHeader {
3535
u32 reason_phrase_hash { 0 };
3636
};
3737

38-
struct [[gnu::packed]] CacheFooter {
38+
struct CacheFooter {
3939
static ErrorOr<CacheFooter> read_from_stream(Stream&);
4040
ErrorOr<void> write_to_stream(Stream&) const;
4141

0 commit comments

Comments
 (0)