Bug 382703

Summary: sax2: yast2 live-installer segfaults
Product: [openSUSE] openSUSE 11.0 Reporter: Dejan Cabrilo <dcabrilo>
Component: SaX2Assignee: Marcus Schaefer <ms>
Status: RESOLVED FIXED QA Contact: E-mail List <qa-bugs>
Severity: Critical    
Priority: P5 - None CC: captain.magnus, deanjo, forgotten_0RO3Kla3Ru, forgotten_Drfk9mafMw, francis, johnl, jsrain, jsuchome, kailed, mvidner, robert.brooks, sontek
Version: Beta 1   
Target Milestone: ---   
Hardware: Other   
OS: Other   
Whiteboard:
Found By: --- Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---
Bug Depends on:    
Bug Blocks: 388612    
Attachments: y2log of "yast2 --ncurses live-installer"
yast logs
SaX.log
sax2.diff
ycp test case

Description Dejan Cabrilo 2008-04-23 10:04:13 UTC
Created attachment 209836 [details]
y2log of "yast2 --ncurses live-installer"

Running as root "yast2 --ncurses live-installer" on gnome live cd, X flickers (actually, it shows console, but then returns to X) and segfaults at "Saving keyboard configuration":

/sbin/yast2: line 420:  3550 Segmentation fault      $ybindir/y2base $module "$@" "$SELECTED_GUI" $Y2_GEOMETRY $Y2UI_ARGS

I'm attaching the entire y2log (I'm not sure what I'm looking for there).
Comment 1 robert brooks 2008-04-25 21:55:27 UTC
same issue upon attempting to install the x86 - 64 

sbin/yast2: line 420: 6092 Segmentation fault
$ybindir/y2base $module "$@" "$SELECTED_GUI" $Y2_GEOMETRY $Y2UI_ARGS


lenovo t61 - 4 Gb, t9300, intel GMA X3100, etc.

-- let me know if you want logs

/rb
Comment 2 Jiri Srain 2008-04-28 10:08:13 UTC
Cannot reproduce with recent snapshot, since kernel freezes before YaST segfaults :-/
Comment 3 Jiri Srain 2008-04-29 12:03:00 UTC
Reproducued, the crash is exactly the same as in the log - it crashes when calling SaX.
Comment 4 Marcus Schaefer 2008-04-29 15:14:33 UTC
sax2 logs ?

init 3
sax2

==> /var/log/SaX.log

thanks
Comment 5 Magnus Boman 2008-05-01 04:19:54 UTC
Created attachment 211682 [details]
yast logs

Still happens with the 20080430 LiveCD.

Running sax2 as well as sax2 -r -a works without any issues.

Attaching both yast and sax logs.
Comment 6 Magnus Boman 2008-05-01 04:20:16 UTC
Created attachment 211683 [details]
SaX.log
Comment 7 Magnus Boman 2008-05-01 04:39:47 UTC
*** Bug 384207 has been marked as a duplicate of this bug. ***
Comment 8 John Anderson 2008-05-01 08:01:42 UTC
Heres a bt

(gdb) bt
#0  0x00007f9668ae02f6 in poll () from /lib64/libc.so.6
#1  0x00007f9660389edf in ?? () from /usr/lib64/libglib-2.0.so.0
#2  0x00007f966038a1dc in g_main_context_iteration ()
   from /usr/lib64/libglib-2.0.so.0
#3  0x00007f9662055d8c in YGUI::idleLoop ()
   from /usr/lib64/YaST2/plugin/libpy2gtk.so.2
#4  0x00007f9666ced625 in YUI::uiThreadMainLoop () from /usr/lib64/libyui.so.3
#5  0x00007f9666ced87e in start_ui_thread () from /usr/lib64/libyui.so.3
#6  0x00007f9669c42040 in start_thread () from /lib64/libpthread.so.0
#7  0x00007f9668ae903d in clone () from /lib64/libc.so.6
(gdb) bt
#0  0x00007f9668ae02f6 in poll () from /lib64/libc.so.6
#1  0x00007f9660389edf in ?? () from /usr/lib64/libglib-2.0.so.0
#2  0x00007f966038a1dc in g_main_context_iteration ()
   from /usr/lib64/libglib-2.0.so.0
#3  0x00007f9662055d8c in YGUI::idleLoop ()
   from /usr/lib64/YaST2/plugin/libpy2gtk.so.2
#4  0x00007f9666ced625 in YUI::uiThreadMainLoop () from /usr/lib64/libyui.so.3
#5  0x00007f9666ced87e in start_ui_thread () from /usr/lib64/libyui.so.3
#6  0x00007f9669c42040 in start_thread () from /lib64/libpthread.so.0
#7  0x00007f9668ae903d in clone () from /lib64/libc.so.6
Comment 9 John Anderson 2008-05-01 08:12:27 UTC
(gdb) thread 2
[Switching to thread 2 (process 10744)]#0  0x00007f9668a488b7 in kill ()
   from /lib64/libc.so.6
(gdb) bt
#0  0x00007f9668a488b7 in kill () from /lib64/libc.so.6
#1  0x00007f966a73398f in signal_handler () from /usr/lib64/liby2.so.2
#2  <signal handler called>
#3  0x00007f9655ee44ba in QString::ascii_helper ()
   from /usr/lib64/libQtCore.so.4
#4  0x00007f965b6d67da in SaX::SaXManipulateKeyboard::setXKBVariant ()
   from /usr/lib64/libsax.so.7
#5  0x00007f965b9b7d80 in _wrap_SaXManipulateKeyboard_setXKBVariant ()
   from /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/SaX/SaX.so
#6  0x00007f96674ef6f5 in Perl_pp_entersub ()
   from /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/CORE/libperl.so
#7  0x00007f96674c4b07 in Perl_runops_debug ()
   from /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/CORE/libperl.so
#8  0x00007f96674ea800 in Perl_call_sv ()
   from /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/CORE/libperl.so
#9  0x00007f96677ec0c4 in YPerl::callInner ()
   from /usr/lib64/YaST2/plugin/libpy2lang_perl.so
#10 0x00007f96677f2f89 in Y2PerlFunctionCall::evaluateCall ()
   from /usr/lib64/YaST2/plugin/libpy2lang_perl.so
#11 0x00007f966a9c3ddf in YEFunction::evaluate () from /usr/lib64/libycp.so.3
#12 0x00007f966a9cd681 in YSExpression::evaluate () from /usr/lib64/libycp.so.3
#13 0x00007f966a9ec0c9 in YBlock::evaluate () from /usr/lib64/libycp.so.3
---Type <return> to continue, or q <return> to quit---
#14 0x00007f966a9c098c in Y2YCPFunction::evaluateCall ()
   from /usr/lib64/libycp.so.3
#15 0x00007f966a9c3ddf in YEFunction::evaluate () from /usr/lib64/libycp.so.3
#16 0x00007f966a9cd681 in YSExpression::evaluate () from /usr/lib64/libycp.so.3
#17 0x00007f966a9ec0c9 in YBlock::evaluate () from /usr/lib64/libycp.so.3
#18 0x00007f966a9cd4f1 in YSBlock::evaluate () from /usr/lib64/libycp.so.3
#19 0x00007f966a9dd1f7 in YSIf::evaluate () from /usr/lib64/libycp.so.3
#20 0x00007f966a9dd227 in YSIf::evaluate () from /usr/lib64/libycp.so.3
#21 0x00007f966a9ec0c9 in YBlock::evaluate () from /usr/lib64/libycp.so.3
#22 0x00007f966a9a766c in YCPCodeRep::evaluate () from /usr/lib64/libycp.so.3
#23 0x00007f966b0ae1dd in Y2WFMComponent::doActualWork ()
   from /usr/lib64/YaST2/plugin/libpy2wfm.so.2
#24 0x00007f966b0abc27 in Y2WFMComponent::CallFunction ()
   from /usr/lib64/YaST2/plugin/libpy2wfm.so.2
#25 0x00007f966b0b1262 in ?? () from /usr/lib64/YaST2/plugin/libpy2wfm.so.2
#26 0x00007f966a9bfa0a in YEBuiltin::evaluate () from /usr/lib64/libycp.so.3
#27 0x00007f966a9cd681 in YSExpression::evaluate () from /usr/lib64/libycp.so.3
#28 0x00007f966a9ec0c9 in YBlock::evaluate () from /usr/lib64/libycp.so.3
#29 0x00007f966a9a766c in YCPCodeRep::evaluate () from /usr/lib64/libycp.so.3
#30 0x00007f966aa1cfb8 in ?? () from /usr/lib64/libycp.so.3
#31 0x00007f966a9bf95a in YEBuiltin::evaluate () from /usr/lib64/libycp.so.3
#32 0x00007f966a9cd681 in YSExpression::evaluate () from /usr/lib64/libycp.so.3
#33 0x00007f966a9ec0c9 in YBlock::evaluate () from /usr/lib64/libycp.so.3
---Type <return> to continue, or q <return> to quit---
#34 0x00007f966a9a766c in YCPCodeRep::evaluate () from /usr/lib64/libycp.so.3
#35 0x00007f966aa1cfb8 in ?? () from /usr/lib64/libycp.so.3
#36 0x00007f966a9bf95a in YEBuiltin::evaluate () from /usr/lib64/libycp.so.3
#37 0x00007f966a9cd681 in YSExpression::evaluate () from /usr/lib64/libycp.so.3
#38 0x00007f966a9ec0c9 in YBlock::evaluate () from /usr/lib64/libycp.so.3
#39 0x00007f966a9a766c in YCPCodeRep::evaluate () from /usr/lib64/libycp.so.3
#40 0x00007f966b0ae1dd in Y2WFMComponent::doActualWork ()
   from /usr/lib64/YaST2/plugin/libpy2wfm.so.2
#41 0x00007f966b0abc27 in Y2WFMComponent::CallFunction ()
   from /usr/lib64/YaST2/plugin/libpy2wfm.so.2
#42 0x00007f966b0b1262 in ?? () from /usr/lib64/YaST2/plugin/libpy2wfm.so.2
#43 0x00007f966a9bfa0a in YEBuiltin::evaluate () from /usr/lib64/libycp.so.3
#44 0x00007f966a9af67a in YEPropagate::evaluate () from /usr/lib64/libycp.so.3
#45 0x00007f966a9cd8b7 in YSAssign::evaluate () from /usr/lib64/libycp.so.3
#46 0x00007f966a9ec0c9 in YBlock::evaluate () from /usr/lib64/libycp.so.3
#47 0x00007f966a9cd4f1 in YSBlock::evaluate () from /usr/lib64/libycp.so.3
#48 0x00007f966a9e0902 in YSWhile::evaluate () from /usr/lib64/libycp.so.3
#49 0x00007f966a9ec0c9 in YBlock::evaluate () from /usr/lib64/libycp.so.3
#50 0x00007f966a9c098c in Y2YCPFunction::evaluateCall ()
   from /usr/lib64/libycp.so.3
#51 0x00007f966a9c3ddf in YEFunction::evaluate () from /usr/lib64/libycp.so.3
#52 0x00007f966a9cd8b7 in YSAssign::evaluate () from /usr/lib64/libycp.so.3
#53 0x00007f966a9ec0c9 in YBlock::evaluate () from /usr/lib64/libycp.so.3
---Type <return> to continue, or q <return> to quit---
#54 0x00007f966a9c098c in Y2YCPFunction::evaluateCall ()
   from /usr/lib64/libycp.so.3
#55 0x00007f966a9c3ddf in YEFunction::evaluate () from /usr/lib64/libycp.so.3
#56 0x00007f966a9cd8b7 in YSAssign::evaluate () from /usr/lib64/libycp.so.3
#57 0x00007f966a9ec0c9 in YBlock::evaluate () from /usr/lib64/libycp.so.3
#58 0x00007f966a9a766c in YCPCodeRep::evaluate () from /usr/lib64/libycp.so.3
#59 0x00007f966b0ae1dd in Y2WFMComponent::doActualWork ()
   from /usr/lib64/YaST2/plugin/libpy2wfm.so.2
#60 0x00007f966a732566 in main () from /usr/lib64/liby2.so.2
#61 0x00007f9668a3444a in __libc_start_main () from /lib64/libc.so.6
#62 0x0000000000400659 in ?? ()
#63 0x00007fff734d9968 in ?? ()
#64 0x000000000000001c in ?? ()
#65 0x0000000000000003 in ?? ()
#66 0x00007fff734da7a0 in ?? ()
#67 0x00007fff734da7ba in ?? ()
#68 0x00007fff734da7c9 in ?? ()
#69 0x0000000000000000 in ?? ()
Comment 10 Stephan Kulow 2008-05-01 11:06:23 UTC
I don't understand the crash. The QString passed to the function is not initialized - which usually happens with static objects somewhere, but I see nothing hinting to where this would be.

And I don't understand where the ycp:string is mapped to a PERL string is mapped to a Qt String. All I know: it's triggered by Keyboard:update_x86. I'm testing what bugs I get when I take this call out, most likely less harmless than crashing installer.

But somehow the problem is gnome cd specific - or at least not happening with yast2-qt, which would be another indication that the QString is created somewhere not so cleverly.
Comment 11 Magnus Boman 2008-05-01 13:23:19 UTC
Workaround from coolo;
edit /usr/share/YaST2/clients/live_save_config_finish.ycp and take out the call of update_x86 and the following cp
Comment 12 Stephan Kulow 2008-05-01 19:40:39 UTC
*** Bug 385729 has been marked as a duplicate of this bug. ***
Comment 13 Forgotten User 0RO3Kla3Ru 2008-05-01 22:16:31 UTC
*** Bug 385749 has been marked as a duplicate of this bug. ***
Comment 14 Stephan Kulow 2008-05-02 05:37:42 UTC
The whole thing with debug infos btw:
#3  0xb3ea644a in QString::ascii_helper (this=0xb3fde3a8) at tools/qstring.cpp:3221
#4  0xb5b04cb0 in SaX::SaXManipulateKeyboard::setXKBVariant (this=0x9c7f608, layout=@0xbfa85484, variant=@0xbfa85480)
    at /usr/include/QtCore/qstring.h:546
#5  0xb5be4519 in _wrap_SaXManipulateKeyboard_setXKBVariant (my_perl=0x82381c8, cv=0x871ab44) at SaX_wrap.cxx:10968
#6  0xb76b7899 in Perl_pp_entersub (my_perl=0x82381c8) at pp_hot.c:2847
#7  0xb7679063 in Perl_runops_debug (my_perl=0x82381c8) at dump.c:1931
#8  0xb76b0bf8 in Perl_call_sv (my_perl=0x82381c8, sv=0x8b71e24, flags=4) at perl.c:2646
#9  0xb76b3d24 in Perl_call_pv (my_perl=0x82381c8, sub_name=0x9c3e2a4 "XLibAPI::setXkbVariant", flags=4) at perl.c:2547
#10 0xb7845e35 in YPerl::callInner (this=0x8237fa0, module=
        {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfa85824 "��\200\bk���o\001� ��\bY��xY�����\bY���f�\t\001"}}, function=
        {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfa85820 "L\231�\t��\200\bk���o\001� ��\bY��xY�����\bY���f�\t\001"}}, method=true, argList=
          {<YCPValue> = {<YCPElement> = {element = 0xbfa8581c}, <No data fields>}, <No data fields>}, wanted_result_type=
        {<constPtrBase<Type>> = {<RepPtrBase> = {_vptr.RepPtrBase = 0xbfa85814}, <No data fields>}, _ptr = {_obj = 0xbfa85820}}) at YPerl.cc:291
#11 0xb784e179 in Y2PerlFunctionCall::evaluateCall (this=0x9c866e8) at YPerlNamespace.cc:269
#12 0xb7f4cfb2 in YEFunction::evaluate (this=0x8b93a50, cse=false) at YExpression.cc:3126
#13 0xb7f59b5a in YSExpression::evaluate (this=0x8b93a38, cse=false) at YStatement.cc:269
#14 0xb7f7d167 in YBlock::evaluate (this=0x8b93378, cse=false) at YBlock.cc:604
#15 0xb7f495d5 in Y2YCPFunction::evaluateCall (this=0x8d35f78) at YExpression.cc:3363
#16 0xb7f4cfb2 in YEFunction::evaluate (this=0x97a74b8, cse=false) at YExpression.cc:3126
#17 0xb7f59b5a in YSExpression::evaluate (this=0x807fff8, cse=false) at YStatement.cc:269
#18 0xb7f7d167 in YBlock::evaluate (this=0x9753a80, cse=false) at YBlock.cc:604
#19 0xb7f59894 in YSBlock::evaluate (this=0x8e61430, cse=false) at YStatement.cc:326
#20 0xb7f6a77e in YSIf::evaluate (this=0x9620528, cse=false) at YStatement.cc:1061
#21 0xb7f6a77e in YSIf::evaluate (this=0x9643dc0, cse=false) at YStatement.cc:1061
#22 0xb7f7d167 in YBlock::evaluate (this=0x8807fe0, cse=false) at YBlock.cc:604
#23 0xb7f2e3ee in YCPCodeRep::evaluate (this=0x862c6e8, cse=168) at YCPCode.cc:82
#24 0xb8058c18 in Y2WFMComponent::doActualWork (this=0x80757d0, arglist=@0xbfa86278, displayserver=0x0) at Y2WFMComponent.cc:177
#25 0xb80598ee in Y2WFMComponent::CallFunction (this=0x80757d0, client=@0xbfa86274, args=@0xbfa86278) at Y2WFMComponent.cc:662
#26 0xb805e1d9 in WFMCallFunction1 (name=@0xbfa86274, args=@0xbfa86278) at WFM.cc:80
#27 0xb7f48bf2 in YEBuiltin::evaluate (this=0x966cad8, cse=false) at YExpression.cc:2559
#28 0xb7f59b5a in YSExpression::evaluate (this=0x968f5f0, cse=false) at YStatement.cc:269
#29 0xb7f7d167 in YBlock::evaluate (this=0x961e9f0, cse=false) at YBlock.cc:604
#30 0xb7f2e3ee in YCPCodeRep::evaluate (this=0x964f5e8, cse=168) at YCPCode.cc:82
#31 0xb7fb9665 in l_foreach (sym=@0xbfa865f4, list=@0xbfa865f8, expr=@0xbfa865fc) at YCPBuiltinList.cc:1065
#32 0xb7f48b82 in YEBuiltin::evaluate (this=0x961e6c0, cse=false) at YExpression.cc:2562
#33 0xb7f59b5a in YSExpression::evaluate (this=0x961e780, cse=false) at YStatement.cc:269
#34 0xb7f7d167 in YBlock::evaluate (this=0x95afb58, cse=false) at YBlock.cc:604
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) frame 3
#3  0xb3ea644a in QString::ascii_helper (this=0xb3fde3a8) at tools/qstring.cpp:3221
3221        d->asciiCache = true;
Current language:  auto; currently c++
(gdb) print d
$1 = (QString::Data *) 0x0
Comment 15 Martin Vidner 2008-05-02 07:16:19 UTC
(In reply to comment #10 from Stephan Kulow)
> And I don't understand where the ycp:string is mapped to a PERL string is
> mapped to a Qt String.

Keyboard::Save is in YCP, it calls (via yast2-perl-bindings) XLibAPI::setXkbVariant which is in Perl . That calls XLib::setXkbVariant which is also in Perl. That calls SaX::SaXManipulateKeyboard::setXKBVariant which is a SWIG Perl wrapper for a C++ class.

I tried "Y2DEBUG=1 yast2 --gtk ./k.ycp" where k.ycp calls only Keyboard::Save(true) and it does not crash.
Comment 16 Marcus Schaefer 2008-05-02 08:00:45 UTC
Hmm, I have tried setXKBVariant with sax2 directly and through a
binding (perl like in YaST2) and I couldn't reproduce a crash. Which
variant is set in your case ?
Comment 17 Forgotten User 0RO3Kla3Ru 2008-05-02 08:25:37 UTC
See my notes in Bug 385749 ... en_US doesn't work, but de_DE does work (selection at CD-Splash)
Comment 18 Martin Vidner 2008-05-02 10:59:48 UTC
I could reproduce the crash on Beta 1, calling "yast keyboard" (curses version), selecting English (US) and saving the settings.

In another debugging thread, I found that the arguments were layout=us variant=basic.
Comment 19 Martin Vidner 2008-05-02 11:11:29 UTC
The crash appears to happen at keyboard.cpp:376: item = *vList.at (varCount);
Comment 20 Marcus Schaefer 2008-05-02 12:08:38 UTC
does the following patch fix it ?
Comment 21 Marcus Schaefer 2008-05-02 12:09:15 UTC
Created attachment 211965 [details]
sax2.diff
Comment 22 Marcus Schaefer 2008-05-02 12:10:11 UTC
Thanks Martin for your investigations
Comment 23 Martin Vidner 2008-05-02 12:40:55 UTC
You're welcome. But for more testing, please give me RPMs.
Comment 24 Marcus Schaefer 2008-05-02 13:33:33 UTC
yep I understand ;) for me the patch has worked. I will submit a package
to stable now. Hope it solves the issue. If not feel free to reopen
the bug

thanks
Comment 25 Stephan Kulow 2008-05-07 15:02:28 UTC
jiri submitted a new yast2-live-installer without the workaround and now it crashes again
Comment 26 Marcus Schaefer 2008-05-08 09:26:34 UTC
as I said there could be many broken code in sax2 gui (xapi) and
libsax at the moment because of the library change.

back to this bug I can't reproduce a crash if it is related to
comment #19. The following test code works for me

--------snip--------

#!/usr/bin/perl
use SaX;

$exc = new SaX::SaXException;
$exc -> setDebug (1);

$init = new SaX::SaXInit;
if ( $init -> needInit() ) {
    print ("initialize cache...\n");
    $init -> doInit();
}
$status = $init -> errorString();
print "++++ $status\n";

$config  = new SaX::SaXConfig;
$desktop = new SaX::SaXImport ( $SaX::SAX_DESKTOP );
$card    = new SaX::SaXImport ( $SaX::SAX_CARD );
$path    = new SaX::SaXImport ( $SaX::SAX_PATH );
$kbd     = new SaX::SaXImport ( $SaX::SAX_KEYBOARD );

$desktop -> doImport();
$card    -> doImport();
$path    -> doImport();
$kbd     -> doImport();

$manip2 = new SaX::SaXManipulateKeyboard ($kbd);
$manip2 -> setXKBVariant ("us","basic");

exit (0);

--------snap---------

Can you provide a perl test which makes the application to crash ?
If so please provide the test and the /etc/X11/xorg.conf file

thanks
Comment 27 Marcus Schaefer 2008-05-08 09:33:55 UTC
*** Bug 387773 has been marked as a duplicate of this bug. ***
Comment 28 Stephan Kulow 2008-05-08 14:58:26 UTC
thanks for your test case, it at least shows some problems in valgrind
Comment 29 Stephan Kulow 2008-05-08 21:45:41 UTC
Created attachment 213736 [details]
ycp test case

Reproduce the crash with:
/usr/lib/YaST2/bin/y2base ./inst_complex_welcome.ycp ncurses --no-threads

And Martin was right, the list was returning a 0 and casted away.
Comment 30 Marcus Schaefer 2008-05-09 09:34:27 UTC
ok, with your latest patch "lifetime-support.patch" the crash is fixed
I was able to run the suggested test case of comment #29 successfully
your and Dirks patches have been checked in to the repository.



thanks for the fix
Comment 31 Marcus Schaefer 2008-05-09 14:23:38 UTC
*** Bug 387585 has been marked as a duplicate of this bug. ***
Comment 32 Stefan Dirsch 2008-05-10 21:19:55 UTC
*** Bug 389097 has been marked as a duplicate of this bug. ***