Discussion:
Заезды по памяти по F1
(слишком старое сообщение для ответа)
Nil A
2023-10-19 15:09:34 UTC
Permalink
*** Answering a message in area ru.fidonet.today (2:50 Bone: Жизнь современного Фидо).

Hello, Cheslav!

Thursday October 19 2023 07:26, from Cheslav Osanadze -> Dmitriy Kulikov:

CO>>> F1! Третий экран. Нил пишет с Голдеда, но там, наверное, F1
CO>>> отломано.

DK>> Сейчас попробовал. У меня тоже F1 отломано. И, похоже, очень
DK>> давно. Каким скотчем примотать обратно?

CO> Как вы их ломаете?!

Как-как, заходим по F1, читаем там, а потом по ESC выходим, и тут то санитайзер
и срабатывает

==6255==ERROR: AddressSanitizer: heap-use-after-free on address 0x60800001226c
at pc 0x000000b4c1d5 bp 0x7ffdfdc2f5b0 sp 0x7ffdfdc2f5a8
READ of size 2 at 0x60800001226c thread T0
#0 0xb4c1d4 in getxch(int)
/home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:319
#1 0xb81225 in wmenuget()
/home/fido/src/golded-plus/goldlib/gcui/gwinmenu.cpp:1063
#2 0xb6ecef in disp_cat
/home/fido/src/golded-plus/goldlib/gcui/gwinhlp1.cpp:341
#3 0xb70b2b in help_handler
/home/fido/src/golded-plus/goldlib/gcui/gwinhlp1.cpp:580
#4 0xb4a275 in kbd_call_func
/home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:97
#5 0xb4c0fd in getxch(int)
/home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:308
#6 0x61d62e in getxchtick()
/home/fido/src/golded-plus/goldlib/gcui/gkbdbase.h:168
#7 0x7b1739 in ReaderGetKey()
/home/fido/src/golded-plus/golded3/geread.cpp:66
#8 0x7b185e in ViewMessage(int)
/home/fido/src/golded-plus/golded3/geread.cpp:93
#9 0x7b92c6 in Reader() /home/fido/src/golded-plus/golded3/geread.cpp:457
#10 0x6c63bb in main /home/fido/src/golded-plus/golded3/gemain.cpp:54
#11 0x7fa72baf7f44 in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x21f44)
#12 0x407c98
(/home/fido/src/golded-plus/build_asan/golded3/golded+0x407c98)

0x60800001226c is located 76 bytes inside of 88-byte region
[0x608000012220,0x608000012278)
freed by thread T0 here:
#0 0x7fa72d4b9307 in __interceptor_free
../../../../src/libsanitizer/asan/asan_malloc_linux.cc:122
#1 0xae7905 in throw_free_debug(void*, char const*, int)
/home/fido/src/golded-plus/goldlib/gall/gmemdbg.cpp:478
#2 0xb49501 in setonkey(unsigned short, void (*)(), unsigned short)
/home/fido/src/golded-plus/goldlib/gcui/gkbdbase.cpp:2480
#3 0xb6daf9 in esc_esc
/home/fido/src/golded-plus/goldlib/gcui/gwinhlp1.cpp:100
#4 0xb4a275 in kbd_call_func
/home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:97
#5 0xb4c0fd in getxch(int)
/home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:308
#6 0xb81225 in wmenuget()
/home/fido/src/golded-plus/goldlib/gcui/gwinmenu.cpp:1063
#7 0xb6ecef in disp_cat
/home/fido/src/golded-plus/goldlib/gcui/gwinhlp1.cpp:341
#8 0xb70b2b in help_handler
/home/fido/src/golded-plus/goldlib/gcui/gwinhlp1.cpp:580
#9 0xb4a275 in kbd_call_func
/home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:97
#10 0xb4c0fd in getxch(int)
/home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:308
#11 0x61d62e in getxchtick()
/home/fido/src/golded-plus/goldlib/gcui/gkbdbase.h:168
#12 0x7b1739 in ReaderGetKey()
/home/fido/src/golded-plus/golded3/geread.cpp:66
#13 0x7b185e in ViewMessage(int)
/home/fido/src/golded-plus/golded3/geread.cpp:93
#14 0x7b92c6 in Reader() /home/fido/src/golded-plus/golded3/geread.cpp:457
#15 0x6c63bb in main /home/fido/src/golded-plus/golded3/gemain.cpp:54
#16 0x7fa72baf7f44 in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x21f44)

previously allocated by thread T0 here:
#0 0x7fa72d4b989e in __interceptor_calloc
../../../../src/libsanitizer/asan/asan_malloc_linux.cc:153
#1 0xae6011 in throw_calloc_debug(unsigned long, unsigned long, char
const*, int) /home/fido/src/golded-plus/goldlib/gall/gmemdbg.cpp:333
#2 0xae5eb5 in throw_malloc_debug(unsigned long, char const*, int)
/home/fido/src/golded-plus/goldlib/gall/gmemdbg.cpp:305
#3 0xb4958c in setonkey(unsigned short, void (*)(), unsigned short)
/home/fido/src/golded-plus/goldlib/gcui/gkbdbase.cpp:2493
#4 0xb6ec07 in disp_cat
/home/fido/src/golded-plus/goldlib/gcui/gwinhlp1.cpp:336
#5 0xb70b2b in help_handler
/home/fido/src/golded-plus/goldlib/gcui/gwinhlp1.cpp:580
#6 0xb4a275 in kbd_call_func
/home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:97
#7 0xb4c0fd in getxch(int)
/home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:308
#8 0x61d62e in getxchtick()
/home/fido/src/golded-plus/goldlib/gcui/gkbdbase.h:168
#9 0x7b1739 in ReaderGetKey()
/home/fido/src/golded-plus/golded3/geread.cpp:66
#10 0x7b185e in ViewMessage(int)
/home/fido/src/golded-plus/golded3/geread.cpp:93
#11 0x7b92c6 in Reader() /home/fido/src/golded-plus/golded3/geread.cpp:457
#12 0x6c63bb in main /home/fido/src/golded-plus/golded3/gemain.cpp:54
#13 0x7fa72baf7f44 in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x21f44)

SUMMARY: AddressSanitizer: heap-use-after-free
/home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:319 in getxch(int)

Best Regards, Nil
Cheslav Osanadze
2023-10-19 15:11:09 UTC
Permalink
Привет Nil!

19 Окт 23 18:09, Nil A -> Cheslav Osanadze:

CO>>>> F1! Третий экран. Нил пишет с Голдеда, но там, наверное, F1
CO>>>> отломано.

DK>>> Сейчас попробовал. У меня тоже F1 отломано. И, похоже, очень
DK>>> давно. Каким скотчем примотать обратно?

CO>> Как вы их ломаете?!

NA> Как-как, заходим по F1, читаем там, а потом по ESC выходим, и тут то
NA> санитайзер и срабатывает

NA> ==6255==ERROR: AddressSanitizer: heap-use-after-free on address

За столько лет работы напильником, уже можно было из паровоза получить
истребитель 5++.:(


Cheslav.


... Из всего софта y меня только BIOS лицензионный!
Nil A
2023-10-19 17:16:24 UTC
Permalink
Hello, Cheslav!

Thursday October 19 2023 18:11, from Cheslav Osanadze -> Nil A:

NA>> Как-как, заходим по F1, читаем там, а потом по ESC выходим, и тут
NA>> то санитайзер и срабатывает

NA>> ==6255==ERROR: AddressSanitizer: heap-use-after-free on address

CO> За столько лет работы напильником, уже можно было из паровоза
CO> получить истребитель 5++.:(

Причём вот именно тут по F1 даже не надо иметь широкий терминал, а просто 80
символов достаточно.

Хорошо тогда ещё операции с нодлистом вычистили, а то тоже там падало. Виталий
вон вычистил проверку орфографии. Осталось кнопку F1 починить Ж-)

Best Regards, Nil
Cheslav Osanadze
2023-10-19 16:26:59 UTC
Permalink
Привет Nil!

19 Окт 23 20:16, Nil A -> Cheslav Osanadze:

NA>>> Как-как, заходим по F1, читаем там, а потом по ESC выходим, и
NA>>> тут то санитайзер и срабатывает

NA>>> ==6255==ERROR: AddressSanitizer: heap-use-after-free on address

CO>> За столько лет работы напильником, уже можно было из паровоза
CO>> получить истребитель 5++.:(

NA> Причём вот именно тут по F1 даже не надо иметь широкий терминал, а
NA> просто 80 символов достаточно.

У меня выставлена ширина в 84 символа.

NA> Хорошо тогда ещё операции с нодлистом вычистили, а то тоже там падало.
NA> Виталий вон вычистил проверку орфографии. Осталось кнопку F1 починить
NA> Ж-)

Успеете к официальному закрытию фидо?:)


Cheslav.


... Женись на ком хочешь, все равно пожалеешь!
Nil A
2023-10-19 18:34:20 UTC
Permalink
Hello, Cheslav!

Thursday October 19 2023 19:26, from Cheslav Osanadze -> Nil A:

NA>> Причём вот именно тут по F1 даже не надо иметь широкий терминал,
NA>> а просто 80 символов достаточно.

Так у тебя не vt100? И не этот, как в ролике vt510
https://hachyderm.io/@GrantMeStrength/111253611428778812 ?
Где ты купил терминал на 84 символа, там ещё есть, а так можно было? ;-)

CO> Успеете к официальному закрытию фидо?:)

Ой, не смеши мои подковы. Фидо закрывалось ещё в конце 90х, ну или кому там ещё
ADSL не провели в начале нулевых.

Best Regards, Nil
Cheslav Osanadze
2023-10-19 18:29:03 UTC
Permalink
Привет Nil!

19 Окт 23 21:34, Nil A -> Cheslav Osanadze:

NA>>> Причём вот именно тут по F1 даже не надо иметь широкий терминал,
^^^^^^^^^^^^
NA>>> а просто 80 символов достаточно.

NA> Так у тебя не vt100? И не этот, как в ролике vt510
NA> https://hachyderm.io/@GrantMeStrength/111253611428778812 ?
NA> Где ты купил терминал на 84 символа, там ещё есть, а так можно было?
NA> ;-)

А кто говорил про "широкий терминал"?:)

CO>> Успеете к официальному закрытию фидо?:)

NA> Ой, не смеши мои подковы. Фидо закрывалось ещё в конце 90х, ну или
NA> кому там ещё ADSL не провели в начале нулевых.

Я на это и намекаю! Процесс стремится к бесконечности...


Cheslav.


... ICQ - цветок на могиле рабочего времени.
Nil A
2023-10-19 19:33:28 UTC
Permalink
Hello, Cheslav!

Thursday October 19 2023 21:29, from Cheslav Osanadze -> Nil A:

NA>> Так у тебя не vt100? И не этот, как в ролике vt510
NA>> https://hachyderm.io/@GrantMeStrength/111253611428778812 ?
NA>> Где ты купил терминал на 84 символа, там ещё есть, а так можно
NA>> было? ;-)
CO> А кто говорил про "широкий терминал"?:)

Так этож мак, там всегда всё широко и далеко, и я на него не насосал.

CO>>> Успеете к официальному закрытию фидо?:)
NA>> Ой, не смеши мои подковы. Фидо закрывалось ещё в конце 90х, ну
NA>> или кому там ещё ADSL не провели в начале нулевых.
CO> Я на это и намекаю! Процесс стремится к бесконечности...

Бесконечность тут не уметна. Лучше говорить о функции, стремящейся к нулю, но
никогда его не коснётся.

Best Regards, Nil
Nil A
2023-10-26 04:02:40 UTC
Permalink
Hello, Vitaliy!

Thursday October 19 2023 18:09, from Nil A -> Cheslav Osanadze:

NA> Как-как, заходим по F1, читаем там, а потом по ESC выходим, и тут то
NA> санитайзер и срабатывает

NA> ==6255==ERROR: AddressSanitizer: heap-use-after-free on address
NA> 0x60800001226c at pc 0x000000b4c1d5 bp 0x7ffdfdc2f5b0 sp
NA> 0x7ffdfdc2f5a8 READ of size 2 at 0x60800001226c thread T0
NA> #0 0xb4c1d4 in getxch(int)
NA> /home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:319
NA> #1 0xb81225 in wmenuget()
[бла..бла..бла]

Вот так я чиню эту багу, и всё у меня работает по Ф1. А сломано там было page
down, page up, и esc из f1.

diff --git a/goldlib/gcui/gwinhlp1.cpp b/goldlib/gcui/gwinhlp1.cpp
--- a/goldlib/gcui/gwinhlp1.cpp
+++ b/goldlib/gcui/gwinhlp1.cpp
@@ -331,9 +331,9 @@ static void disp_cat()
if (arraycnt)
{
// define the PgUp/PgDn/Esc keys
- setonkey(Key_PgUp,esc_pgup,0);
- setonkey(Key_PgDn,esc_pgdn,0);
- setonkey(Key_Esc,esc_esc,0);
+ setonkey(Key_PgUp,NULL,0);
+ setonkey(Key_PgDn,NULL,0);
+ setonkey(Key_Esc,NULL,0);

// end the menu and process it

wmenuend(BASETAGID,M_OMNI|M_NOQS,0,0,whelp.selattr,whelp.selattr,BLACK_|_BLACK,whelp.barattr);

Best Regards, Nil
Vitaliy Aksyonov
2023-10-26 04:34:56 UTC
Permalink
Привет, Nil!

26 Oct 23 07:02, ты писал(а) мне:

NA>> Как-как, заходим по F1, читаем там, а потом по ESC выходим, и тут
NA>> то санитайзер и срабатывает

NA>> ==6255==ERROR: AddressSanitizer: heap-use-after-free on address
NA>> 0x60800001226c at pc 0x000000b4c1d5 bp 0x7ffdfdc2f5b0 sp
NA>> 0x7ffdfdc2f5a8 READ of size 2 at 0x60800001226c thread T0
NA>> #0 0xb4c1d4 in getxch(int)
NA>> /home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:319
NA>> #1 0xb81225 in wmenuget()
NA> [бла..бла..бла]

NA> Вот так я чиню эту багу, и всё у меня работает по Ф1. А сломано там
NA> было page down, page up, и esc из f1.

NA> diff --git a/goldlib/gcui/gwinhlp1.cpp b/goldlib/gcui/gwinhlp1.cpp
NA> --- a/goldlib/gcui/gwinhlp1.cpp
NA> +++ b/goldlib/gcui/gwinhlp1.cpp
NA> @@ -331,9 +331,9 @@ static void disp_cat()
NA> if (arraycnt)
NA> {
NA> // define the PgUp/PgDn/Esc keys
NA> - setonkey(Key_PgUp,esc_pgup,0);
NA> - setonkey(Key_PgDn,esc_pgdn,0);
NA> - setonkey(Key_Esc,esc_esc,0);
NA> + setonkey(Key_PgUp,NULL,0);
NA> + setonkey(Key_PgDn,NULL,0);
NA> + setonkey(Key_Esc,NULL,0);

То есть ты просто отключил обработчики этих клавиш? Отличный фикс!

Best regards,
Vitaliy Aksyonov.

... Стремясь к вершине, помни, что это может быть не Олимп, а Везyвий.
Nil A
2023-10-28 03:38:58 UTC
Permalink
Hello, Vitaliy!

Thursday October 26 2023 07:34, from Vitaliy Aksyonov -> Nil A:

NA>>> Как-как, заходим по F1, читаем там, а потом по ESC выходим, и
NA>>> тут то санитайзер и срабатывает

NA>>> ==6255==ERROR: AddressSanitizer: heap-use-after-free on address
NA>>> 0x60800001226c at pc 0x000000b4c1d5 bp 0x7ffdfdc2f5b0 sp
NA>>> 0x7ffdfdc2f5a8 READ of size 2 at 0x60800001226c thread T0
NA>>> #0 0xb4c1d4 in getxch(int)
NA>>> /home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:319
NA>>> #1 0xb81225 in wmenuget()
NA>> [бла..бла..бла]
NA>> - setonkey(Key_Esc,esc_esc,0);
NA>> + setonkey(Key_Esc,NULL,0);

VA> То есть ты просто отключил обработчики этих клавиш? Отличный фикс!

Да, никрута так фиксить, конечно, подловил.
Тогда вот так пофиксю, вольёшь?

diff --git a/goldlib/gcui/gkbdgetm.cpp b/goldlib/gcui/gkbdgetm.cpp
--- a/goldlib/gcui/gkbdgetm.cpp
+++ b/goldlib/gcui/gkbdgetm.cpp
@@ -310,6 +310,7 @@ gkey getxch(int __tick)
if(gkbd->inmenu and gmou.FreeCursor())
return 0;
#endif
+ _onkey = gkbd->onkey;
break;
}
_onkey = _onkey->prev;

Глобальные переменные - это зло. огда мы отрабатываем клавишу ESC, то esc_esc()
вычистит себя, и doubly-linked list останется пустым, т.е. gkbd->onkey уже
освобождённым оказывается.

Best Regards, Nil
Vitaliy Aksyonov
2023-10-27 19:25:54 UTC
Permalink
Привет, Nil!

28 Oct 23 06:38, ты писал(а) мне:

NA>>>> Как-как, заходим по F1, читаем там, а потом по ESC выходим, и
NA>>>> тут то санитайзер и срабатывает

NA>>>> ==6255==ERROR: AddressSanitizer: heap-use-after-free on address
NA>>>> 0x60800001226c at pc 0x000000b4c1d5 bp 0x7ffdfdc2f5b0 sp
NA>>>> 0x7ffdfdc2f5a8 READ of size 2 at 0x60800001226c thread T0
NA>>>> #0 0xb4c1d4 in getxch(int)
NA>>>> /home/fido/src/golded-plus/goldlib/gcui/gkbdgetm.cpp:319
NA>>>> #1 0xb81225 in wmenuget()
NA>>> [бла..бла..бла]
NA>>> - setonkey(Key_Esc,esc_esc,0);
NA>>> + setonkey(Key_Esc,NULL,0);

VA>> То есть ты просто отключил обработчики этих клавиш? Отличный
VA>> фикс!

NA> Да, никрута так фиксить, конечно, подловил.

Бывает. Четыре глаза - оно всегда лучше двух. :)

NA> Тогда вот так пофиксю, вольёшь?

NA> diff --git a/goldlib/gcui/gkbdgetm.cpp b/goldlib/gcui/gkbdgetm.cpp
NA> --- a/goldlib/gcui/gkbdgetm.cpp
NA> +++ b/goldlib/gcui/gkbdgetm.cpp
NA> @@ -310,6 +310,7 @@ gkey getxch(int __tick)
NA> if(gkbd->inmenu and gmou.FreeCursor())
NA> return 0;
NA> #endif
NA> + _onkey = gkbd->onkey;
NA> break;
NA> }
NA> _onkey = _onkey->prev;

NA> Глобальные переменные - это зло. огда мы отрабатываем клавишу ESC, то
NA> esc_esc() вычистит себя, и doubly-linked list останется пустым, т.е.
NA> gkbd->onkey уже освобождённым оказывается.

Можешь вкратце описать, в чём проблема и как твой фикс её решает? Патч
подготовлю.

Best regards,
Vitaliy Aksyonov.

... Трудись, трудись, труд из тебя человека сделает!
Nil A
2023-10-28 05:27:04 UTC
Permalink
Hello, Vitaliy!

Friday October 27 2023 22:25, from Vitaliy Aksyonov -> Nil A:

NA>> diff --git a/goldlib/gcui/gkbdgetm.cpp
NA>> b/goldlib/gcui/gkbdgetm.cpp
NA>> --- a/goldlib/gcui/gkbdgetm.cpp
NA>> +++ b/goldlib/gcui/gkbdgetm.cpp
NA>> @@ -310,6 +310,7 @@ gkey getxch(int __tick)
NA>> if(gkbd->inmenu and gmou.FreeCursor())
NA>> return 0;
NA>> #endif
NA>> + _onkey = gkbd->onkey;
NA>> break;
NA>> }
NA>> _onkey = _onkey->prev;

NA>> Глобальные переменные - это зло. огда мы отрабатываем клавишу
NA>> ESC, то esc_esc() вычистит себя, и doubly-linked list останется
NA>> пустым, т.е. gkbd->onkey уже освобождённым оказывается.

VA> Можешь вкратце описать, в чём проблема и как твой фикс её решает? Патч
VA> подготовлю.

gkbd - глобальный объект для работы с вводом. Синглтон напрашивается, но тут
просто глобал.
gkbd->onkey - doubly linked list какие мы готовы обрабатывать клавиши с их
gkbd->колбеками.
Там цикл по этому листу, если совпало, то вызываем колбек.
Проблема случается в F1 помощи, если нажимать pageup, pagedown, esc клавиши.
Запуститься их обработчик, например, esc_esc(), который первым делом вызовет
setonkey(Key_Esc,NULL,0) и уберёт себя из этого linked list.
Далее там в getxch() стоит break после обработки, а потом if, чтобы key to pass
back, 0=don't pass.
Главное, что в этом месте esc_esc() был единственным в linked list, поэтому он
весь и освобождается, считай весь gkbd->onkey nullptr.
Это ещё Одинновский баг там похоже. Ни у кого не падает, потому что
освобождается и тут же используется снова, там просто других маллоков нет
рядом, поэтому память не трогается никем больше.

Best Regards, Nil
Nil A
2023-10-28 05:59:34 UTC
Permalink
Hello, Vitaliy!

Saturday October 28 2023 08:27, from Nil A -> Vitaliy Aksyonov:

NA>>> diff --git a/goldlib/gcui/gkbdgetm.cpp
NA>>> b/goldlib/gcui/gkbdgetm.cpp
NA>>> --- a/goldlib/gcui/gkbdgetm.cpp
NA>>> +++ b/goldlib/gcui/gkbdgetm.cpp
NA>>> @@ -310,6 +310,7 @@ gkey getxch(int __tick)
NA>>> if(gkbd->inmenu and gmou.FreeCursor())
NA>>> return 0;
NA>>> #endif
NA>>> + _onkey = gkbd->onkey;
NA>>> break;
NA>>> }
NA>>> _onkey = _onkey->prev;

NA>>> Глобальные переменные - это зло. огда мы отрабатываем клавишу
NA>>> ESC, то esc_esc() вычистит себя, и doubly-linked list останется
NA>>> пустым, т.е. gkbd->onkey уже освобождённым оказывается.

VA>> Можешь вкратце описать, в чём проблема и как твой фикс её решает?
VA>> Патч подготовлю.

NA> gkbd - глобальный объект для работы с вводом. Синглтон напрашивается,
NA> но тут просто глобал. gkbd->onkey - doubly linked list какие мы готовы
NA> обрабатывать клавиши с их колбеками. Там цикл по этому листу, если
NA> совпало, то вызываем колбек. Проблема случается в F1 помощи, если
NA> нажимать pageup, pagedown, esc клавиши. Запуститься их обработчик,
NA> например, esc_esc(), который первым делом вызовет
NA> setonkey(Key_Esc,NULL,0) и уберёт себя из этого linked list. Далее там
NA> в getxch() стоит break после обработки, а потом if, чтобы key to pass
NA> back, 0=don't pass.

Я немного соврал. Падает на ESC, потому что он себя из списка вынимает, и эта
такущая _onkey становится уже освобождённой. Мой фикс на начало линкед-листа
переходит. Может быть это и не правильно.

Best Regards, Nil

Loading...