使用python2库 paramiko 模拟ssh登录终端,概率性出现coredump
问题原因
自动化场景下,使用python 库paramiko 模拟ssh登录终端,概率性出现无法判断终端类型,导致terminal_get_size获取终端大小失败,终端大小读取为65535*65535,进而导致terminal_change_size时,申请65535*65535的内存失败。
此后,执行re_clear_display刷新当前屏幕信息时,访问越界导致概率性coredump
问题日志
#0 0xb6a1e7e8 in re_clear_display () from /usr/lib/libedit.so.0
(gdb) bt
#0 0xb6a1e7e8 in re_clear_display () from /usr/lib/libedit.so.0
#1 0xb6a1bf10 in read_prepare (el=0xd36c18) at read.c:432
#2 0xb6a1c1cc in el_wgets (el=0xd36c18, nread=0xbecbd8fc) at read.c:508
#3 0xb6a150ac in el_gets () from /usr/lib/libedit.so.0
#4 0xb6a3251c in readline (p=0x40541c ‘ ‘ <repeats 12 times>, “Copyright(C) 2013-2
#5 0x004022f8 in get_user_input () at /home/workspace/V2R2_trunk/application/src/a
#6 main (argc=
, argv= ) at /home/workspace/V2R2_trunk (gdb) frame #1
Invalid character ‘#’ in expression.
(gdb) frame 1
#1 0xb6a1bf10 in read_prepare (el=0xd36c18) at read.c:432
432 read.c: No such file or directory.
(gdb) print el->el_terminal
$1 = {t_name = 0x0, t_size = {h = 65535, v = 65535}, t_flags = 0, t_buf = 0xd37fe8
t_fkey = 0xd38ff8}
(gdb) frame 4
#4 0xb6a3251c in readline (p=0x40541c ‘ ‘ <repeats 12 times>, “Copyright(C) 2013-2
455 readline.c: No such file or directory.
函数调用
1 | graph TD |
修改
1 | src/terminal.c | 26 ++++++++++++++++++++++++-- |