On 9/23/22 3:24 PM, srobert...@peratonlabs.com wrote:

Bash Version: 5.1
Patch Level: 8
Release Status: release

Description:
         Repeatable buffer overflow core-dump in bash's readline
         due to rl_forced_update_display trying to zeroize a
         string that is not NUL terminated.

Repeat-By:
         Create a small window with a new 2x1 bash inside of it.
         Resize that window.  Type a command. Get a memory error.

         Full annotated debugging session showing the
         target, smoke, gun, and bullet included below.

Fix:
         There may be a second bug which prevents the buffer from being
         NUL terminated in the first place, but I urge you to apply
         this patch no matter what, since the code as written is very
         dangerous without the bounds check.

         The bug report was also submitted to the libreadline people
         since it still appears to show up there.

--- display.c.orig      2022-09-23 12:23:36.282214239 -0400
+++ display.c   2022-09-23 12:28:17.028118101 -0400
@@ -2644,11 +2644,13 @@
  rl_forced_update_display (void)
  {
    register char *temp;
+  register int templen;
if (visible_line)
      {
        temp = visible_line;
-      while (*temp)
+      templen = vis_lbsize;
+      while (*temp && templen--)
         *temp++ = '\0';
      }
    rl_on_new_line ();

Thanks for the report. This patch isn't the right way to do it; vis_lbsize
is the size of a different buffer (which happens to be the same size, but
still).

It's easier and probably faster to use

memset (visible_line, 0, line_size);

instead of the loop. See if that works for you.

Chet

--
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    c...@case.edu    http://tiswww.cwru.edu/~chet/


Reply via email to