#1
|
|||
|
|||
Падение в createPathArrayFromMsg()
Nil Alexandrov написал(а) к All в Apr 21 09:03:32 по местному времени:
Нello, All! Имеется битый pkt со следующим телом (pkt сгенировала американская фазилка afl++): === START === AREA:TEST.LOCAL test + Origin: Origin (2:5020/9999.0) SEEN+BY: 5020/9999 PATН: 50 === END === Внутри фунции hpt/src/seenby.c: createPathArrayFromMsg() ведётся подсчёт seenByCount, но как только мы попадаем в блок 375 else 376 { 377 wlog(LLALERT, 378 "Buggy PATН line encountered. Invalid node was removed from the line!"); 379 --*seenByCount; 380 } то мы декрементим seenByCount, после чего он становится равным нулю, и так и уходит в safe_realloc(0, ...) 399 (seenBys) = (sseenBy *)safe_realloc(*seenBys, sizeof(sseenBy) * (seenByCount)); после чего имеем двойное освобождение памяти, что есть UB. ==1338638==ERROR: AddressSanitizer: attempting double-free on 0x60c000003b80 in thread T0: #0 0x55555567f65f in free (/home/nil/husky/build.asan/hpt/hpt+0x12b65f) #1 0x5555556d57a1 in safe_realloc /home/nil/husky/hpt/src/fcommon.c:782 #2 0x55555570bbd4 in createPathArrayFromMsg /home/nil/husky/hpt/src/seenby.c:399 #3 0x5555556dd6bd in forwardMsgToLinks /home/nil/husky/hpt/src/toss.c:827 #4 0x5555556e2ebd in processEMMsg /home/nil/husky/hpt/src/toss.c:1430 #5 0x5555556e4d2a in processMsg /home/nil/husky/hpt/src/toss.c:1723 #6 0x5555556e61a8 in processPkt /home/nil/husky/hpt/src/toss.c:1926 #7 0x5555556e85c5 in processDir /home/nil/husky/hpt/src/toss.c:2368 #8 0x5555556edc57 in toss /home/nil/husky/hpt/src/toss.c:3357 #9 0x5555556c66f1 in main /home/nil/husky/hpt/src/hpt.c:1039 #10 0x7ffff78f50b2 in _libc_start_main (/lib/x8664-linux-gnu/libc.so.6+0x270b2) #11 0x555555594a0d in _start (/home/nil/husky/build.asan/hpt/hpt+0x40a0d) Best Regards, Nil --- GoldED+/LNX 1.1.5 |
#2
|
|||
|
|||
Падение в createPathArrayFromMsg()
Michael Dukelsky написал(а) к Nil Alexandrov в May 21 19:45:46 по местному времени:
Привет, Nil! 30 April 2021 09:03, Nil Alexandrov послал(а) письмо к All: NA> Имеется битый pkt со следующим телом (pkt сгенировала американская NA> фазилка afl++): NA> === START === NA> AREA:TEST.LOCAL NA> test NA> + Origin: Origin (2:5020/9999.0) NA> SEEN+BY: 5020/9999 NA> PATН: 50 NA> === END === NA> Внутри фунции hpt/src/seenby.c: createPathArrayFromMsg() ведётся NA> подсчёт seenByCount, но как только мы попадаем в блок 375 else 376 NA> { 377 wlog(LLALERT, 378 "Buggy PATН line encountered. NA> Invalid node was removed from the line!"); 379 --*seenByCount; 380 NA> } NA> то мы декрементим seenByCount, после чего он становится равным нулю, и NA> так и уходит в saferealloc(0, ...) 399 (*seenBys) = (sseenBy NA> )saferealloc(*seenBys, sizeof(sseenBy) * (seenByCount)); NA> после чего имеем двойное освобождение памяти, что есть UB. Спасибо, исправил. Желаю успехов, Nil! За сим откланиваюсь, Michael. ... node (at) f1042 (dot) ru --- GoldED+/LNX 1.1.5-b20180707 |