Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

darwin-framework-tool: Remove racy access to readline #20634

Merged

Conversation

krypton36
Copy link
Contributor

Problem

It's not safe to access line editing state from the IO thread while
inside readline() on the main thread. This is causing crashes
and the following tsan diagnostic:

AddressSanitizer:DEADLYSIGNAL
=================================================================
==31949==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x00010d676bfb bp 0x7ff7b44e0c10 sp 0x7ff7b44e0be0 T0)
==31949==The signal is caused by a WRITE memory access.
==31949==Hint: address points to the zero page.
    #0 0x10d676bfb in tty_put editline.c:179
    #1 0x10d676b67 in tty_puts editline.c:193
    #2 0x10d677251 in redisplay editline.c:634
    #3 0x10d67783a in rl_forced_update_display editline.c:1415
    #4 0x10d53f8f3 in (anonymous namespace)::LoggingCallback(char const*, unsigned char, char const*, __va_list_tag*) InteractiveCommands.mm:49
    #5 0x10d65cfdc in chip::Logging::LogV(unsigned char, unsigned char, char const*, __va_list_tag*) CHIPLogging.cpp:221
    #6 0x10d65ce07 in chip::Logging::Log(unsigned char, unsigned char, char const*, ...) CHIPLogging.cpp:172
    #7 0x10ba59dd6 in CHIPCommandBridge::ShutdownCommissioner() CHIPCommandBridge.mm:137
    #8 0x10ba59983 in CHIPCommandBridge::MaybeTearDownStack() CHIPCommandBridge.mm:117
    #9 0x10ba57469 in CHIPCommandBridge::Run() CHIPCommandBridge.mm:54
    #10 0x10d611720 in Commands::RunCommand(int, char**, bool) Commands.cpp:147
    #11 0x10d60fdbd in Commands::Run(int, char**) Commands.cpp:51
    #12 0x10bb92586 in main main.mm:41
    #13 0x7ffb2fcaf23b  (<unknown module>)

==31949==Register values:
rax = 0x0000000000000000  rbx = 0x00007ff7b44e0d00  rcx = 0x000010000000000d  rdx = 0x0000000000000000  
rdi = 0x000000000000000d  rsi = 0x00000000000120a8  rbp = 0x00007ff7b44e0c10  rsp = 0x00007ff7b44e0be0  
 r8 = 0x00007ff854d72f88   r9 = 0x0000000000000000  r10 = 0x00000000ffffff00  r11 = 0x00007ff854d72f80  
r12 = 0x00007ff7b44e2540  r13 = 0x000000010eaeace0  r14 = 0x000000010bb92410  r15 = 0x00007ff7b44e2540  
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV editline.c:179 in tty_put
==31949==ABORTING
zsh: abort      ./out/darwin-x64-darwin-framework-tool-no-ble-asan/darwin-framework-tool  

Change overview

Remove the code that attempts to redraw readline after printing logs.
This avoids segfaults during logging at the cost of those logs
overwriting the prompt (this is not trivial to fix as readline
is a blocking API).

Testing

  • Run chip-tool interactive.
  • Quit interactive and verify issue is resolved.

Copy link
Contributor

@bzbarsky-apple bzbarsky-apple left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving in that this is basically identical to #20466

But the resulting user experience is not so great. :( Not sure what we can do with it.

@github-actions
Copy link

github-actions bot commented Jul 12, 2022

PR #20634: Size comparison from 57cb679 to 91aed99

Increases (2 builds for bl602, cc13x2_26x2)
platform target config section 57cb679 91aed99 change % change
bl602 lighting-app bl602 .text 1058588 1058592 4 0.0
cc13x2_26x2 shell LP_CC2652R7 (read only) 658766 658774 8 0.0
.text 573532 573540 8 0.0
Decreases (3 builds for bl602, cc13x2_26x2, cyw30739)
platform target config section 57cb679 91aed99 change % change
bl602 lighting-app bl602+rpc (read/write) 1442818 1442810 -8 -0.0
.text 1090276 1090272 -4 -0.0
cc13x2_26x2 shell LP_CC2652R7 (read/write) 187960 187952 -8 -0.0
cyw30739 light cyw930739m2evb_01 (read/write) 579622 579614 -8 -0.0
.app_xip_area 458376 458368 -8 -0.0
Full report (43 builds for bl602, cc13x2_26x2, cyw30739, efr32, esp32, k32w, linux, mbed, nrfconnect, p6, telink)
platform target config section 57cb679 91aed99 change % change
bl602 lighting-app bl602 (read/write) 1397386 1397386 0 0.0
.bss 116978 116978 0 0.0
.data 4480 4480 0 0.0
.text 1058588 1058592 4 0.0
bl602+rpc (read/write) 1442818 1442810 -8 -0.0
.bss 124418 124418 0 0.0
.data 4600 4600 0 0.0
.text 1090276 1090272 -4 -0.0
cc13x2_26x2 all-clusters-app LP_CC2652R7 (read only) 666275 666275 0 0.0
(read/write) 184948 184948 0 0.0
.bss 74116 74116 0 0.0
.data 3356 3356 0 0.0
.rodata 88139 88139 0 0.0
.text 577820 577820 0 0.0
all-clusters-minimal-app LP_CC2652R7 (read only) 632083 632083 0 0.0
(read/write) 157684 157684 0 0.0
.bss 73412 73412 0 0.0
.data 3356 3356 0 0.0
.rodata 77379 77379 0 0.0
.text 554380 554380 0 0.0
lock-ftd LP_CC2652R7 (read only) 669183 669183 0 0.0
(read/write) 172184 172184 0 0.0
.bss 71148 71148 0 0.0
.data 3280 3280 0 0.0
.rodata 76279 76279 0 0.0
.text 592424 592424 0 0.0
lock-mtd LP_CC2652R7 (read only) 618591 618591 0 0.0
(read/write) 144264 144264 0 0.0
.bss 66868 66868 0 0.0
.data 3280 3280 0 0.0
.rodata 76159 76159 0 0.0
.text 541944 541944 0 0.0
pump-app LP_CC2652R7 (read only) 678183 678183 0 0.0
(read/write) 164032 164032 0 0.0
.bss 71228 71228 0 0.0
.data 3280 3280 0 0.0
.rodata 88503 88503 0 0.0
.text 589196 589196 0 0.0
pump-controller-app LP_CC2652R7 (read only) 664007 664007 0 0.0
(read/write) 178328 178328 0 0.0
.bss 71348 71348 0 0.0
.data 3276 3276 0 0.0
.rodata 84367 84367 0 0.0
.text 579160 579160 0 0.0
shell LP_CC2652R7 (read only) 658766 658774 8 0.0
(read/write) 187960 187952 -8 -0.0
.bss 76420 76420 0 0.0
.data 3360 3360 0 0.0
.rodata 84918 84918 0 0.0
.text 573532 573540 8 0.0
cyw30739 light cyw930739m2evb_01 (read/write) 579622 579614 -8 -0.0
.app_xip_area 458376 458368 -8 -0.0
.bss 64184 64184 0 0.0
.data 716 716 0 0.0
.rodata 0 0 0 0.0
.text 112 112 0 0.0
lock cyw930739m2evb_01 (read/write) 585574 585574 0 0.0
.app_xip_area 459600 459600 0 0.0
.bss 68912 68912 0 0.0
.data 720 720 0 0.0
.rodata 0 0 0 0.0
.text 112 112 0 0.0
ota-requestor-no-progress-logging cyw930739m2evb_01 (read/write) 582774 582774 0 0.0
.app_xip_area 462376 462376 0 0.0
.bss 63392 63392 0 0.0
.data 660 660 0 0.0
.rodata 0 0 0 0.0
.text 112 112 0 0.0
efr32 lighting-app BRD4161A (read/write) 1081436 1081436 0 0.0
.bss 132996 132996 0 0.0
.data 2048 2048 0 0.0
.text 946372 946372 0 0.0
BRD4161A+rpc (read/write) 1135764 1135764 0 0.0
.bss 149676 149676 0 0.0
.data 2260 2260 0 0.0
.text 983808 983808 0 0.0
BRD4161A+rs911x (read/write) 947924 947924 0 0.0
.bss 140768 140768 0 0.0
.data 2048 2048 0 0.0
.text 805088 805088 0 0.0
lock-app BRD4161A+wf200 (read/write) 1128848 1128848 0 0.0
.bss 144184 144184 0 0.0
.data 2060 2060 0 0.0
.text 982580 982580 0 0.0
window-app BRD4161A (read/write) 1075244 1075244 0 0.0
.bss 134468 134468 0 0.0
.data 2076 2076 0 0.0
.text 938676 938676 0 0.0
esp32 all-clusters-app c3devkit (read only) 1020100 1020100 0 0.0
(read/write) 1485642 1485642 0 0.0
.dram0.bss 70080 70080 0 0.0
.dram0.data 14600 14600 0 0.0
.flash.rodata 215528 215528 0 0.0
.flash.text 1020100 1020100 0 0.0
.iram0.text 62902 62902 0 0.0
m5stack (read only) 1073971 1073971 0 0.0
(read/write) 487712 487712 0 0.0
.dram0.bss 75600 75600 0 0.0
.dram0.data 34144 34144 0 0.0
.flash.rodata 245972 245972 0 0.0
.flash.text 1068587 1068587 0 0.0
.iram0.text 123267 123267 0 0.0
k32w light k32w061+release (read/write) 658832 658832 0 0.0
.bss 69516 69516 0 0.0
.data 1992 1992 0 0.0
.text 581524 581524 0 0.0
lock k32w061+release (read/write) 685684 685684 0 0.0
.bss 69980 69980 0 0.0
.data 2004 2004 0 0.0
.text 607900 607900 0 0.0
linux all-clusters-app debug (read only) 2960825 2960825 0 0.0
(read/write) 154752 154752 0 0.0
.bss 61536 61536 0 0.0
.data 2048 2048 0 0.0
.data.rel.ro 84968 84968 0 0.0
.dynamic 608 608 0 0.0
.got 4536 4536 0 0.0
.init 27 27 0 0.0
.init_array 1048 1048 0 0.0
.rodata 263613 263613 0 0.0
.text 2520002 2520002 0 0.0
all-clusters-minimal-app debug (read only) 2813401 2813401 0 0.0
(read/write) 146688 146688 0 0.0
.bss 60864 60864 0 0.0
.data 2048 2048 0 0.0
.data.rel.ro 77608 77608 0 0.0
.dynamic 608 608 0 0.0
.got 4488 4488 0 0.0
.init 27 27 0 0.0
.init_array 1048 1048 0 0.0
.rodata 265341 265341 0 0.0
.text 2373026 2373026 0 0.0
bridge-app debug+rpc (read only) 2315449 2315449 0 0.0
(read/write) 125504 125504 0 0.0
.bss 48928 48928 0 0.0
.data 3824 3824 0 0.0
.data.rel.ro 66984 66984 0 0.0
.dynamic 608 608 0 0.0
.got 4392 4392 0 0.0
.init 27 27 0 0.0
.init_array 728 728 0 0.0
.rodata 198016 198016 0 0.0
.text 1955698 1955698 0 0.0
chip-tool debug (read only) 10345025 10345025 0 0.0
(read/write) 622240 622240 0 0.0
.bss 24728 24728 0 0.0
.data 3234 3234 0 0.0
.data.rel.ro 587888 587888 0 0.0
.dynamic 608 608 0 0.0
.got 5096 5096 0 0.0
.init 27 27 0 0.0
.init_array 640 640 0 0.0
.rodata 515861 515861 0 0.0
.text 8397476 8397476 0 0.0
chip-tool-no-interactive-ipv6only arm64 (read only) 10031716 10031716 0 0.0
(read/write) 684529 684529 0 0.0
.bss 42609 42609 0 0.0
.data 1152 1152 0 0.0
.data.rel.ro 623432 623432 0 0.0
.dynamic 528 528 0 0.0
.got 13520 13520 0 0.0
.init 24 24 0 0.0
.init_array 192 192 0 0.0
.rodata 478260 478260 0 0.0
.text 7992788 7992788 0 0.0
lighting-app debug+rpc (read only) 2551193 2551193 0 0.0
(read/write) 129528 129528 0 0.0
.bss 49440 49440 0 0.0
.data 2096 2096 0 0.0
.data.rel.ro 72136 72136 0 0.0
.dynamic 608 608 0 0.0
.got 4392 4392 0 0.0
.init 27 27 0 0.0
.init_array 816 816 0 0.0
.rodata 213704 213704 0 0.0
.text 2167522 2167522 0 0.0
lock-app debug (read only) 2515913 2515913 0 0.0
(read/write) 124512 124512 0 0.0
.bss 47840 47840 0 0.0
.data 1712 1712 0 0.0
.data.rel.ro 69096 69096 0 0.0
.dynamic 608 608 0 0.0
.got 4424 4424 0 0.0
.init 27 27 0 0.0
.init_array 792 792 0 0.0
.rodata 228744 228744 0 0.0
.text 2122002 2122002 0 0.0
ota-provider-app debug (read only) 2322305 2322305 0 0.0
(read/write) 118312 118312 0 0.0
.bss 47488 47488 0 0.0
.data 1944 1944 0 0.0
.data.rel.ro 63096 63096 0 0.0
.dynamic 608 608 0 0.0
.got 4488 4488 0 0.0
.init 27 27 0 0.0
.init_array 672 672 0 0.0
.rodata 203512 203512 0 0.0
.text 1956018 1956018 0 0.0
ota-requestor-app debug (read only) 2439361 2439361 0 0.0
(read/write) 125216 125216 0 0.0
.bss 49856 49856 0 0.0
.data 2232 2232 0 0.0
.data.rel.ro 67288 67288 0 0.0
.dynamic 608 608 0 0.0
.got 4480 4480 0 0.0
.init 27 27 0 0.0
.init_array 728 728 0 0.0
.rodata 207296 207296 0 0.0
.text 2060914 2060914 0 0.0
shell debug (read only) 2551169 2551169 0 0.0
(read/write) 141104 141104 0 0.0
.bss 57448 57448 0 0.0
.data 1264 1264 0 0.0
.data.rel.ro 76688 76688 0 0.0
.dynamic 608 608 0 0.0
.got 4136 4136 0 0.0
.init 27 27 0 0.0
.init_array 928 928 0 0.0
.rodata 227762 227762 0 0.0
.text 2166306 2166306 0 0.0
thermostat-no-ble arm64 (read only) 2595316 2595316 0 0.0
(read/write) 158289 158289 0 0.0
.bss 65249 65249 0 0.0
.data 1704 1704 0 0.0
.data.rel.ro 83240 83240 0 0.0
.dynamic 528 528 0 0.0
.got 5072 5072 0 0.0
.init 24 24 0 0.0
.init_array 400 400 0 0.0
.rodata 165476 165476 0 0.0
.text 2190064 2190064 0 0.0
tv-app debug (read only) 3102225 3102225 0 0.0
(read/write) 257704 257704 0 0.0
.bss 167016 167016 0 0.0
.data 4848 4848 0 0.0
.data.rel.ro 79392 79392 0 0.0
.dynamic 608 608 0 0.0
.got 4848 4848 0 0.0
.init 27 27 0 0.0
.init_array 952 952 0 0.0
.rodata 249024 249024 0 0.0
.text 2665298 2665298 0 0.0
tv-casting-app debug (read only) 5577785 5577785 0 0.0
(read/write) 161968 161968 0 0.0
.bss 50248 50248 0 0.0
.data 2416 2416 0 0.0
.data.rel.ro 103048 103048 0 0.0
.dynamic 608 608 0 0.0
.got 4744 4744 0 0.0
.init 27 27 0 0.0
.init_array 864 864 0 0.0
.rodata 343209 343209 0 0.0
.text 4956626 4956626 0 0.0
mbed lock-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2448112 2448112 0 0.0
.bss 213940 213940 0 0.0
.data 5872 5872 0 0.0
.text 1410756 1410756 0 0.0
nrfconnect all-clusters-app nrf52840dk_nrf52840 (read/write) 1175175 1175175 0 0.0
bss 142900 142900 0 0.0
rodata 141888 141888 0 0.0
text 811492 811492 0 0.0
all-clusters-minimal-app nrf52840dk_nrf52840 (read/write) 1155367 1155367 0 0.0
bss 142136 142136 0 0.0
rodata 133416 133416 0 0.0
text 800936 800936 0 0.0
p6 all-clusters-app default (read/write) 2566144 2566144 0 0.0
.bss 149120 149120 0 0.0
.data 2776 2776 0 0.0
.text 1524408 1524408 0 0.0
all-clusters-minimal-app default (read/write) 2511440 2511440 0 0.0
.bss 148400 148400 0 0.0
.data 2776 2776 0 0.0
.text 1469704 1469704 0 0.0
light-app default (read/write) 2441368 2441368 0 0.0
.bss 140456 140456 0 0.0
.data 2592 2592 0 0.0
.text 1399632 1399632 0 0.0
lock-app default (read/write) 2468520 2468520 0 0.0
.bss 140304 140304 0 0.0
.data 2600 2600 0 0.0
.text 1426784 1426784 0 0.0
telink light-switch-app tlsr9518adk80d (read/write) 797284 797284 0 0.0
bss 70576 70576 0 0.0
noinit 40416 40416 0 0.0
text 565678 565678 0 0.0
lighting-app tlsr9518adk80d (read/write) 817116 817116 0 0.0
bss 71420 71420 0 0.0
noinit 40416 40416 0 0.0
text 582002 582002 0 0.0

@bzbarsky-apple
Copy link
Contributor

Fast-tracking platform-specific fix.

@bzbarsky-apple bzbarsky-apple merged commit bbcc8ea into project-chip:master Jul 12, 2022
andy31415 pushed a commit that referenced this pull request Jul 13, 2022
Co-authored-by: krypton36 <jvillasenor@apple.com>
ajwak pushed a commit to ajwak/connectedhomeip that referenced this pull request Jul 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants