From: Toon Claes <toon@iotcl.com>
To: Patrick Steinhardt <ps@pks.im>, git@vger.kernel.org
Cc: oxsignal <awo@kakao.com>, Christian Couder <chriscool@tuxfamily.org>
Subject: Re: [PATCH v2 06/12] reftable/block: fix OOB write with bogus inflated log size
Date: Fri, 03 Jul 2026 11:23:37 +0200 [thread overview]
Message-ID: <871pdk4eau.fsf@emacs.iotcl.com> (raw)
In-Reply-To: <20260629-pks-reftable-hardening-v2-6-b0228e7d908d@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
> diff --git a/t/unit-tests/u-reftable-block.c b/t/unit-tests/u-reftable-block.c
> index f4e926ce3a..088162483e 100644
> --- a/t/unit-tests/u-reftable-block.c
> +++ b/t/unit-tests/u-reftable-block.c
> @@ -465,3 +465,35 @@ void test_reftable_block__iterator(void)
> reftable_block_release(&block);
> reftable_buf_release(&data);
> }
> +
> +void test_reftable_block__corrupt_log_block_size(void)
> +{
> + struct reftable_block_source source = { 0 };
> + struct reftable_record rec = {
> + .type = REFTABLE_BLOCK_TYPE_LOG,
> + .u.log = {
> + .refname = (char *) "refs/heads/main",
> + .update_index = 1,
> + .value_type = REFTABLE_LOG_UPDATE,
> + },
> + };
> + struct reftable_block block = { 0 };
> + struct reftable_buf data = REFTABLE_BUF_INIT;
> +
> + cl_reftable_write_block(&data, REFTABLE_BLOCK_TYPE_LOG, &rec, 1);
> +
> + /*
> + * Log blocks store their inflated size as a big-endian 24-bit integer
> + * right after the one-byte block type. Rewrite it to claim a size that
> + * is smaller than the block header.
> + */
> + reftable_put_be24((uint8_t *) data.buf + 1, 1);
Can I suggest to make this test a bit more strict:
/*
* Log blocks store their inflated size as a big-endian 24-bit integer
* right after the one-byte block type.
* First sanity check if the expected value is actually there,
* then rewrite it to claim a size that is smaller than the block header.
*/
void *p = (uint8_t *) data.buf + 1;
uint32_t block_size = reftable_get_be24(p);
cl_assert_equal_i(block_size, 82);
reftable_put_be24(p, 5);
So first do a sanity check to see if the current block_size is what we
expect, this helps us ensure we are actually reading the correct point
in the buffers. Or does this depend on the architecture?
Then write a size that's just below what the expected value is. By using
a value that's just too small, maybe we can avoid off-by-one errors?
> +
> + block_source_from_buf(&source, &data);
> + cl_assert_equal_i(reftable_block_init(&block, &source, 0, 0, data.len,
> + REFTABLE_HASH_SIZE_SHA1, REFTABLE_BLOCK_TYPE_LOG),
> + REFTABLE_FORMAT_ERROR);
> +
> + reftable_block_release(&block);
> + reftable_buf_release(&data);
> +}
--
Cheers,
Toon
next prev parent reply other threads:[~2026-07-03 9:23 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-24 8:23 [PATCH 00/11] reftable: harden against corrupted tables Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 01/11] meson: support building fuzzers with libFuzzer Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 02/11] oss-fuzz: add fuzzer for parsing reftables Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 03/11] reftable/basics: fix OOB read on binary search of empty range Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 04/11] reftable/record: don't abort when decoding invalid ref value type Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 05/11] reftable/block: fix OOB write with bogus inflated log size Patrick Steinhardt
2026-06-26 7:48 ` Christian Couder
2026-06-29 7:08 ` Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 06/11] reftable/block: fix OOB read with bogus block size Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 07/11] reftable/block: fix OOB read with bogus restart count Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 08/11] reftable/block: fix use of uninitialized memory when binsearch fails Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 09/11] reftable/block: fix OOB read with bogus restart offset Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 10/11] reftable/table: fix NULL pointer access when seeking to bogus offsets Patrick Steinhardt
2026-06-24 8:23 ` [PATCH 11/11] reftable/table: fix OOB read on truncated table Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 00/12] reftable: harden against corrupted tables Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 01/12] meson: support building fuzzers with libFuzzer Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 02/12] oss-fuzz: add fuzzer for parsing reftables Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 03/12] reftable/basics: fix OOB read on binary search of empty range Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 04/12] reftable/record: don't abort when decoding invalid ref value type Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 05/12] t/unit-tests: introduce test helper to write reftable blocks Patrick Steinhardt
2026-06-30 17:25 ` Junio C Hamano
2026-07-02 9:31 ` Christian Couder
2026-07-03 2:52 ` Junio C Hamano
2026-06-29 9:02 ` [PATCH v2 06/12] reftable/block: fix OOB write with bogus inflated log size Patrick Steinhardt
2026-07-03 9:23 ` Toon Claes [this message]
2026-07-03 10:32 ` Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 07/12] reftable/block: fix OOB read with bogus block size Patrick Steinhardt
2026-07-03 9:28 ` Toon Claes
2026-07-03 10:32 ` Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 08/12] reftable/block: fix OOB read with bogus restart count Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 09/12] reftable/block: fix use of uninitialized memory when binsearch fails Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 10/12] reftable/block: fix OOB read with bogus restart offset Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 11/12] reftable/table: fix NULL pointer access when seeking to bogus offsets Patrick Steinhardt
2026-06-29 9:02 ` [PATCH v2 12/12] reftable/table: fix OOB read on truncated table Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 00/12] reftable: harden against corrupted tables Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 01/12] meson: support building fuzzers with libFuzzer Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 02/12] oss-fuzz: add fuzzer for parsing reftables Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 03/12] reftable/basics: fix OOB read on binary search of empty range Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 04/12] reftable/record: don't abort when decoding invalid ref value type Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 05/12] t/unit-tests: introduce test helper to write reftable blocks Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 06/12] reftable/block: fix OOB write with bogus inflated log size Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 07/12] reftable/block: fix OOB read with bogus block size Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 08/12] reftable/block: fix OOB read with bogus restart count Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 09/12] reftable/block: fix use of uninitialized memory when binsearch fails Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 10/12] reftable/block: fix OOB read with bogus restart offset Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 11/12] reftable/table: fix NULL pointer access when seeking to bogus offsets Patrick Steinhardt
2026-07-03 12:58 ` [PATCH v3 12/12] reftable/table: fix OOB read on truncated table Patrick Steinhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871pdk4eau.fsf@emacs.iotcl.com \
--to=toon@iotcl.com \
--cc=awo@kakao.com \
--cc=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox