[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: multithreading for a single session


oops forgot to mention the git link where this code can be seen
;)....git://ebrain.in:/libssh-server.git :)

sorry

On Wed, Feb 15, 2012 at 1:59 PM, jeetu.golani@xxxxxxxxx <
jeetu.golani@xxxxxxxxx> wrote:

> Hi Aris,
>
> I've been continuing work with my libssh server based on suggestions you
> had made with regards multithreading when we were debugging issues where I
> was seeing bad packet length, HMAC errors et al.
>
> I refactored my code as you had suggested (below) such that there would be
> only one thread per session, although there could be multiple connects i.e.
> sessions. This worked fantastic for me and I was able to solve the packet
> corruption issues caused due to a race condition with multiple ssh loops
> running. I could therefore have different ssh clients connect to the same
> instance of the server and X forward simple x clients like xcalc, xclock,
> xeyes, xgc.
>
> Unfortunately as soon as I tried to forward more complex applications such
> as libreoffice, chromium etc things weren't working. Further analysis and a
> look at the openssh code showed that these applications spawn multiple
> connects to the same $DISPLAY. Therefore as I understand it (could be
> wrong) the server needs to accept and process different event connections
> on the same session.
>
> I have refactored the code again to account for this but basically this
> reintroduces the same race condition with multiple event handling we had
> seen earlier and while programs like libreoffice, chromium etc more further
> along they eventually crash due to bad packet length, mac errors,etc.
>
> I tried to protect the event handling function ssh_event_dopoll with a
> mutex hoping this will resolve the issue, however it didn't make any
> difference.
>
> I'm at my wits end here and could appreciate advice here. One obvious way
> is for me to somehow refactor my code in a way that eludes me at the moment
> to get around this issue. The other could be if libssh itself would handle
> multithreaded event handling for the same session differently or if I am
> somehow using it in a wrong way.
>
> I have created a git repo of my code so anyone can study it. I have not
> yet put a GPL license header to the code (just realized that ;) ) however I
> don't care and in fact would be honoured if people would find some use for
> this code. The code will eventually be part of the eBrainPool (ebrain.in)
> project which I am working on which itself is GPLv3 - so feel free to use
> it in any way you want.
>
> For now I could really use some ideas on how I could either refactor my
> code to avoid the above issues or somehow if libssh could be modified to
> handle multithreading for the same session differently.
>
> Thanks,
>
> Bye for now
> Jeetu
> ebrain.in | Beehive Computing
> Share your software and computing resources - discover and run software
> from any device around you.
>
>
>
> On Mon, Nov 21, 2011 at 5:42 PM, jeetu.golani@xxxxxxxxx <
> jeetu.golani@xxxxxxxxx> wrote:
>
>> Hi Aris,
>>
>> >
>> > took me a lot of time and head scratching, but I narrowed it down to a
>> > threading problem. Two of your threads are running ssh loops at the same
>>
>> I can completely appreciate the effort you must have gone through to
>> debug this :)...threading issues can be pesky and since I didn't
>> understand the internals of libssh it was proving quite difficult for
>> me to trace this out.....thank you so much Aris :)
>>
>> > I hacked your example so the server_thread() functions leaves early. It
>> > doesn't remove the race but reduces its window. now it works for me,
>> and I'm
>> > able to run an xterm with it.
>> > I strongly recommend that you refactor your code in a singlethread
>> design,
>> > and that you move the x11 callbacks back in the server loop.
>>
>> I just did a cursory test of your code and it definitely runs much
>> better from what I could see :)....I will take your advice to heed and
>> try to refactor the code.
>>
>> >
>> > Let's discuss what libssh can do better to help you write better code.
>> >
>>
>> I'm a little concerned, I would ultimately need to handle multiple
>> sessions.....the code you saw dealt with a single session....do you
>> think this would also trigger similar issues?....what precautions do
>> you think I need to keep in mind while I attempt this?
>>
>> Thanks so much Aris, I'm sooooooo glad to finally have the answer to
>> my question and know that this was a problem in my code....now I can
>> dedicate my energies in this direction :)
>>
>> Bye for now
>>
>>
>>
>> On Mon, Nov 21, 2011 at 3:11 AM, Aris Adamantiadis <aris@xxxxxxxxxxxx>
>> wrote:
>> > Hi Jeetu,
>> >
>> > took me a lot of time and head scratching, but I narrowed it down to a
>> > threading problem. Two of your threads are running ssh loops at the same
>> > time, and this cause races. The probability that the race causes
>> problem can
>> > be high, because there's a trigger (data on socket) and both threads run
>> > almost the same code at the same time.
>> >
>> > Thread 1:      message = ssh_message_get(session);
>> > in server_thread()
>> > Thread 2:                 ssh_event_dopoll(event, 1000);
>> > in wait_for_something()
>> >
>> > I hacked your example so the server_thread() functions leaves early. It
>> > doesn't remove the race but reduces its window. now it works for me,
>> and I'm
>> > able to run an xterm with it.
>> > I strongly recommend that you refactor your code in a singlethread
>> design,
>> > and that you move the x11 callbacks back in the server loop.
>> >
>> > Let's discuss what libssh can do better to help you write better code.
>> >
>> > Kr,
>> >
>> > Aris
>> > Le 09/11/11 12:38, jeetu.golani@xxxxxxxxx a écrit :
>> >>
>> >> Hi Aris,
>> >>
>> >> No probs and I completely understand and appreciate your interest in
>> >> looking into this....please let me know how I can help further :)
>> >>
>> >> Bye for now
>> >>
>> >> On Wed, Nov 9, 2011 at 3:32 PM, Aris Adamantiadis<aris@xxxxxxxxxxxx>
>> >>  wrote:
>> >>>
>> >>> Hi Jeetu,
>> >>>
>> >>> I apologize, still had no time to check it. I'm pretty busy and all my
>> >>> free time is swallowed by another project. I hope I can free myself an
>> >>> hour or two next week to debug this.
>> >>>
>> >>> kr,
>> >>>
>> >>> Aris
>> >>>
>> >>> Le 3/11/11 19:13, jeetu.golani@xxxxxxxxx a écrit :
>> >>>>
>> >>>> Hi Aris,
>> >>>>
>> >>>> Just wanted to check in if you've had a chance to try out the libssh
>> >>>> server code I've sent and reproduce the errors I've been seeing?
>> >>>>
>> >>>> Thanks so much again for looking into this.
>> >>>>
>> >>>> Bye for now
>> >>>>
>> >>>> On Sat, Oct 22, 2011 at 2:20 PM, jeetu.golani@xxxxxxxxx
>> >>>> <jeetu.golani@xxxxxxxxx>  wrote:
>> >>>>>
>> >>>>> Hi Aris,
>> >>>>>
>> >>>>> I'm attaching my proof of concept server code
>> >>>>> as.....ebpsshd-singlesession.c has compile instructions at the
>> >>>>> beginning of the code. You will also need to generate a key.h file
>> >>>>> that holds the public key of the user who will be connecting to this
>> >>>>> server - this is tempoarary since as of now I'm not reading this
>> info
>> >>>>> from an authorized_keys or something similar.
>> >>>>>
>> >>>>> Just create a key.h file in the same directory and put something
>> like :
>> >>>>>
>> >>>>> #define MY_PUB_KEY "[YOUR PUBLIC KEY WITHIN THESE QUOTES]"
>> >>>>>
>> >>>>> Also as of now ebpsshd-singlesession listens in on port 2000. So ssh
>> >>>>> should connect to that port.
>> >>>>>
>> >>>>> I also have a libssh-project-wrapper script that allows me to try
>> this
>> >>>>> out without needing to install the libssh i've built. It basically
>> has
>> >>>>> the content:
>> >>>>>
>> >>>>> #!/bin/sh
>> >>>>>
>> >>>>> export
>> >>>>>
>> LD_LIBRARY_PATH=/home/jeetu/utils/libssh/libssh-project/build/src:/home/jeetu/utils/libssh/libssh-project/build/src/threads
>> >>>>> ./$1
>> >>>>>
>> >>>>> I have been testing this code with simple examples like xeyes and
>> >>>>> xcalc. For some reason xcalc shows the problem much sooner than with
>> >>>>> xeyes, maybe because of the volume of data being transmitted to and
>> >>>>> fro?
>> >>>>>
>> >>>>> This is proof of concept code with a lot of fiddling with buffer
>> sizes
>> >>>>> as I have been trying to study if any of that makes an impact
>> however
>> >>>>> please point out any way you think this can be improved on :)
>> >>>>>
>> >>>>> I'm sorry to drop this in your lap especially if it turns out it was
>> >>>>> some server side code issue, however I completely appreciate your
>> help
>> >>>>> on this. I would like to squash this bug regardless of where it lies
>> >>>>> i.e. in my code or libssh, unfortunately my understanding of libssh
>> >>>>> and the ssh protocol is a little limited. However I do not want to
>> put
>> >>>>> all of this load completely in your lap and if you share your
>> thoughts
>> >>>>> and there's something you would like me to look into then please let
>> >>>>> me know.
>> >>>>>
>> >>>>> Thanks,
>> >>>>> Jeetu
>> >>>>> ebrain.in | Beehive Computing
>> >>>>> Discover and run software from any device around you - an open
>> source
>> >>>>> (GPL) project.
>> >>>>>
>> >>>>>
>> >>>>> On Fri, Oct 21, 2011 at 11:22 PM, jeetu.golani@xxxxxxxxx
>> >>>>> <jeetu.golani@xxxxxxxxx>  wrote:
>> >>>>>>
>> >>>>>> Hi Aris,
>> >>>>>>
>> >>>>>>> I think I'll need a proof-of-concept code to debug this. Would you
>> >>>>>>> mind
>> >>>>>>> sharing your code, or it's not possible (too much integration with
>> >>>>>>> existing code).
>> >>>>>>
>> >>>>>> No problem at all :) The code is an independent unit as of now
>> since I
>> >>>>>> wanted to make it work before I integrate it within my open source
>> >>>>>> project (eBrainPool)
>> >>>>>>
>> >>>>>> I'll mail this out to you tomm (not on the machine with the code
>> right
>> >>>>>> now :) )
>> >>>>>>
>> >>>>>> Thanks so much for looking into this.....truly appreciate it :)
>> >>>>>>
>> >>>>>> Bye for now
>> >>>>>>
>> >>>>>>
>> >>>>>> On Fri, Oct 21, 2011 at 7:26 PM, Aris Adamantiadis<
>> aris@xxxxxxxxxxxx>
>> >>>>>>  wrote:
>> >>>>>>>
>> >>>>>>> Hi Jeetu,
>> >>>>>>>
>> >>>>>>> By seeing your logs, I understand this:
>> >>>>>>> Both side have a hmac error. The openssh client sees it first,
>> sends
>> >>>>>>> a
>> >>>>>>> disconnect (that works), then there's the error in the libssh log.
>> >>>>>>>
>> >>>>>>> I think I'll need a proof-of-concept code to debug this. Would you
>> >>>>>>> mind
>> >>>>>>> sharing your code, or it's not possible (too much integration with
>> >>>>>>> existing code).
>> >>>>>>>
>> >>>>>>> If so, do you think I can reproduce the problem by "fixing"
>> >>>>>>> samplesshd
>> >>>>>>> to make new X11 channels connection connect to the local X11 unix
>> >>>>>>> socket ?
>> >>>>>>>
>> >>>>>>> Thanks.
>> >>>>>>>
>> >>>>>>> Aris
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> Le 18/10/11 20:34, jeetu.golani@xxxxxxxxx a écrit :
>> >>>>>>>>>
>> >>>>>>>>> This is not a problem and shouldn't cause invalid MAC errors.
>> I'm
>> >>>>>>>>> on
>> >>>>>>>>> travel so I'll look at the log when i'm back.
>> >>>>>>>>
>> >>>>>>>> Thanks so much Aris :)
>> >>>>>>>>
>> >>>>>>>> On Tue, Oct 18, 2011 at 5:52 PM, Aris
>> >>>>>>>> Adamantiadis<aris@xxxxxxxxxxxx>  wrote:
>> >>>>>>>>>
>> >>>>>>>>> Hi,
>> >>>>>>>>>
>> >>>>>>>>> This is not a problem and shouldn't cause invalid MAC errors.
>> I'm
>> >>>>>>>>> on
>> >>>>>>>>> travel so I'll look at the log when i'm back.
>> >>>>>>>>>
>> >>>>>>>>> Aris
>> >>>>>>>>>
>> >>>>>>>>> Le 18/10/11 12:30, u@xxxxxxxxxxxxx a écrit :
>> >>>>>>>>>>
>> >>>>>>>>>> Hi all,
>> >>>>>>>>>>
>> >>>>>>>>>> debug3: Incorrect RSA1 identifier
>> >>>>>>>>>> debug3: Could not load "/home/jeetu/.ssh/id_rsa" as a RSA1
>> public
>> >>>>>>>>>> key
>> >>>>>>>>>> debug2: key_type_from_name: unknown key type '-----BEGIN'
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> On Tue, Oct 18, 2011 at 03:22:08PM +0500,
>> jeetu.golani@xxxxxxxxx
>> >>>>>>>>>> wrote:
>> >>>>>>>>>>>
>> >>>>>>>>>>> Hi Aris,
>> >>>>>>>>>>>
>> >>>>>>>>>>> I've attached a log of the libssh server
>> >>>>>>>>>>> (log-1-ebpsshd-singlesession-18102011.txt) and the OpenSSH
>> client
>> >>>>>>>>>>> (log-ssh-1-18102011.txt).
>> >>>>>>>>>>
>> >>>>>>>>>> Greetings
>> >>>>>>>>>> --
>> >>>>>>>>>> Stefan Kuttler ==*== nc.netbeisser.de
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>
>> >>>>
>> >>>
>> >>>
>> >>
>> >
>>
>
>

References:
multithreading for a single session"jeetu.golani@xxxxxxxxx" <jeetu.golani@xxxxxxxxx>
Archive administrator: postmaster@lists.cynapses.org