Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP1
indent.32636
fix-heap-buffer-overwrite-search_brace-CVE-2023...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File fix-heap-buffer-overwrite-search_brace-CVE-2023-40305.patch of Package indent.32636
From 61b6e7d6496052a1c04f29ade66921217554bfeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com> Date: Tue, 15 Aug 2023 19:00:56 +0200 Subject: [PATCH 2/2] Fix a heap buffer overwrite in search_brace() (CVE-2023-40305) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If there was a comment between if-condition and an statement opening bracket and the comment size aligned to an indent-internal 1024 B buffer for comments, indent attempted to write into a nonallocated memory on heap. $ hexdump -C /tmp/write1 00000000 69 66 20 30 3b 65 6c 73 65 2f 2a 0a 0a 0a 0a 0a |if 0;else/*.....| 00000010 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a |................| * 00000800 0a 0a 0a 0a 2a 2f 7b 0a |....*/{.| 00000808 $ valgrind -- ./indent -o /dev/null /tmp/write1 2>&1 | head -n 23 ==26345== Memcheck, a memory error detector ==26345== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al. ==26345== Using Valgrind-3.21.0 and LibVEX; rerun with -h for copyright info ==26345== Command: ./indent -o /dev/null /tmp/write1 ==26345== ==26345== Invalid write of size 1 ==26345== at 0x401558: search_brace (indent.c:232) ==26345== by 0x401CB2: indent_main_loop (indent.c:548) ==26345== by 0x402288: indent (indent.c:758) ==26345== by 0x402931: indent_single_file (indent.c:1003) ==26345== by 0x4029FF: indent_all (indent.c:1041) ==26345== by 0x402BA6: main (indent.c:1122) ==26345== Address 0x4aa7830 is 0 bytes after a block of size 2,048 alloc'd ==26345== at 0x4847A40: realloc (vg_replace_malloc.c:1649) ==26345== by 0x408BA1: xrealloc (globs.c:64) ==26345== by 0x40BEE4: need_chars (handletoken.c:89) ==26345== by 0x401686: search_brace (indent.c:281) ==26345== by 0x401CB2: indent_main_loop (indent.c:548) ==26345== by 0x402288: indent (indent.c:758) ==26345== by 0x402931: indent_single_file (indent.c:1003) ==26345== by 0x4029FF: indent_all (indent.c:1041) ==26345== by 0x402BA6: main (indent.c:1122) The cause was that the buffer was exhausted by the comment text and no space left for the following new-line and curly bracket characters. This patch fixes it by enlarging the buffer two fit these two additional characters. <https://savannah.gnu.org/bugs/index.php?64503> Signed-off-by: Petr Písař <ppisar@redhat.com> --- regression/TEST | 44 +- regression/input/comment-heap-overwrite.c | 2042 ++++++++++++++++ regression/standard/comment-heap-overwrite.c | 2044 +++++++++++++++++ .../standard/comment-heap-overwrite.err | 1 + src/indent.c | 1 + 5 files changed, 4111 insertions(+), 21 deletions(-) create mode 100644 regression/input/comment-heap-overwrite.c create mode 100644 regression/standard/comment-heap-overwrite.c create mode 100644 regression/standard/comment-heap-overwrite.err Index: b/regression/TEST =================================================================== --- a/regression/TEST +++ b/regression/TEST @@ -405,32 +405,35 @@ echo Testing new comment stuff...Done. echo Testing bad code handling.... +ERR=output/errors -# This ends in a error from indent but it shouldn't coredump. -$INDENT input/bug206785.c -o output/bug206785.c 2>output/bug206785.err - -if [ $? -ne 2 ] -then - echo -n ERROR: bad return status from indent. | tee -a $ERR - echo >> $ERR -fi -cd output - -for i in bug206785.c bug206785.err -do - echo -n ...$i... - diff --initial-tab ../standard/$i $i > $i-diffs 2>&1 - if [ -s $i-diffs ] - then - echo -n ERROR: $i failed | tee -a $ERR - echo >> $ERR - else - rm $i-diffs - rm $i - fi - echo +# This ends in an error from indent but it shouldn't coredump. +for TEST in bug206785 comment-heap-overwrite; do + $INDENT -npro input/"$TEST".c -o output/"$TEST".c 2>output/"$TEST".err + + if [ $? -ne 2 ] + then + printf "ERROR: bad return status from indent for %s.c" "$TEST" | tee -a $ERR + echo >> $ERR + fi + + for i in "$TEST".c "$TEST".err + do + printf "...%s..." "$i" + diff --initial-tab standard/"$i" output/"$i" > output/"$i"-diffs 2>&1 + if [ -s output/"$i"-diffs ] + then + printf "ERROR: %s failed" "$i" | tee -a $ERR + echo >> $ERR + else + rm output/"$i"-diffs + rm output/"$i" + fi + echo + done done - +cd output +ERR=errors echo Testing bad code handling...Done. # Now see if any errors occured. If so, bitch and moan, otherwise, Index: b/regression/input/comment-heap-overwrite.c =================================================================== --- /dev/null +++ b/regression/input/comment-heap-overwrite.c @@ -0,0 +1,2042 @@ +if 0;else/* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +*/{ Index: b/regression/standard/comment-heap-overwrite.c =================================================================== --- /dev/null +++ b/regression/standard/comment-heap-overwrite.c @@ -0,0 +1,2044 @@ +if 0; +else /* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + */ + { Index: b/regression/standard/comment-heap-overwrite.err =================================================================== --- /dev/null +++ b/regression/standard/comment-heap-overwrite.err @@ -0,0 +1 @@ +indent: input/comment-heap-overwrite.c:2044: Error:Unexpected end of file Index: b/src/indent.c =================================================================== --- a/src/indent.c +++ b/src/indent.c @@ -221,6 +221,7 @@ static BOOLEAN search_brace( * a `dump_line' call, thus ensuring that the brace * will go into the right column. */ + need_chars (&save_com, 2); *save_com.end++ = EOL; *save_com.end++ = '{'; save_com.len += 2;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor