iDetect overflow before realloc - dedup - deduplicating backup program Err bitreich.org 70 hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70 1Log /scm/dedup/log.gph bitreich.org 70 1Files /scm/dedup/files.gph bitreich.org 70 1Refs /scm/dedup/refs.gph bitreich.org 70 1Tags /scm/dedup/tag bitreich.org 70 1README /scm/dedup/file/README.gph bitreich.org 70 1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 4ae0717157fe75f8c600ff01dded24c2a723af4b /scm/dedup/commit/4ae0717157fe75f8c600ff01dded24c2a723af4b.gph bitreich.org 70 1parent f16ec686af5b4b85ac6c5959361c2156259bd0e9 /scm/dedup/commit/f16ec686af5b4b85ac6c5959361c2156259bd0e9.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Tue, 26 Feb 2019 11:02:47 +0000 Err bitreich.org 70 i Err bitreich.org 70 iDetect overflow before realloc Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M dedup.c | 12 ++++++++++-- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 10 insertions(+), 2 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -4,6 +4,7 @@ Err bitreich.org 70 i Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i@@ -135,10 +136,17 @@ free_snap(struct snapshot *snap) Err bitreich.org 70 i static struct snapshot * Err bitreich.org 70 i grow_snap(struct snapshot *snap, uint64_t nr_blk_descs) Err bitreich.org 70 i { Err bitreich.org 70 i- size_t size; Err bitreich.org 70 i+ size_t size, mul; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (nr_blk_descs > SIZE_MAX / sizeof(snap->blk_desc[0])) Err bitreich.org 70 i+ errx(1, "grow_snap: overflow"); Err bitreich.org 70 i+ mul = nr_blk_descs * sizeof(snap->blk_desc[0]); Err bitreich.org 70 i Err bitreich.org 70 i size = sizeof(*snap); Err bitreich.org 70 i- size += nr_blk_descs * sizeof(snap->blk_desc[0]); Err bitreich.org 70 i+ if (size > SIZE_MAX - mul) Err bitreich.org 70 i+ errx(1, "grow_snap: overflow"); Err bitreich.org 70 i+ size += mul; Err bitreich.org 70 i+ Err bitreich.org 70 i snap = realloc(snap, size); Err bitreich.org 70 i if (snap == NULL) Err bitreich.org 70 i err(1, "realloc"); Err bitreich.org 70 .