[Ace-users] [ace-users] PRF: Premature reactor termination on seteuid

Andre Kostur akostur at incognito.com
Tue Nov 20 20:36:44 CST 2007


    ACE VERSION: 5.6.1

 

    HOST MACHINE and OPERATING SYSTEM: Xen VM of Linux/i386
v2.6.18-5-xen-vserver-686

 

    COMPILER NAME AND VERSION (AND PATCHLEVEL): gcc version 4.1.2
20061115 (prerelease) (Debian 4.1.1-21)

 

    THE $ACE_ROOT/ace/config.h FILE [if you use a link to a platform-

    specific file, simply state which one]:

#define ACE_AS_STATIC_LIBS                      1

#define TAO_AS_STATIC_LIBS                      1

#define ACE_HAS_STANDARD_CPP_LIBRARY            1

#define ACE_HAS_IPV6                            1

#define ACE_USES_IPV4_IPV6_MIGRATION              1

#include "ace/config-linux.h"

 

    THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE [if you

    use a link to a platform-specific file, simply state which one

    (unless this isn't used in this case, e.g., with Microsoft Visual

    C++)]:

ACE_COMPONENTS=FOR_TAO

exceptions        = 1

debug             = 0

optimize          = 1

static_libs_only  = 1

xt_reactor        = 0

fl_reactor        = 0

ssl               = 1

ipv6              = 1

zlib              = 1

LDFLAGS          += -L$(ACE_ROOT)/ace/$(TARGET_PLATFORM)

VDIR            = .obj/$(TARGET_PLATFORM)/

INSLIB          = $(ACE_ROOT)/ace/$(TARGET_PLATFORM)

include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU

 

    CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/default.features

    (used by MPC when you generate your own makefiles):

ssl           = 1

ipv6          = 1

zlib          = 1

 

    AREA/CLASS/EXAMPLE AFFECTED: ACE_Reactor

 

    DOES THE PROBLEM AFFECT:

        COMPILATION? No

        LINKING? No

            On Unix systems, did you run make realclean first?

        EXECUTION? Yes

        OTHER (please specify)? n/a

 

    SYNOPSIS:

 

Performing a seteuid in a thread causes reactors running in other
threads to terminate unexpectedly.

 

    DESCRIPTION:

 

If you have a reactor running in one thread, calling seteuid in a
different thread causes the reactor to terminate its event loop
prematurely, returning -1.  Examining errno immediately after the
reactor indicates EINTR (Interrupted system call).

 

    REPEAT BY:

 

#include <ace/Task.h>

#include <ace/Reactor.h>

#include <iostream>

 

using namespace std;

 

class AClass : public ACE_Task<ACE_MT_SYNCH> {

public:

        int svc() {

                cout << "Beginning task" << endl; ACE_OS::sleep(5);

                cout << "Changing UIDs" << endl;

                ACE_OS::seteuid(1025); ACE_OS::sleep(5);

                cout << "Returning UIDs" << endl;

                ACE_OS::seteuid(0); ACE_OS::sleep(5);

                cout << "Ending task" << endl;

                ACE_Reactor::instance()->end_reactor_event_loop();

                return 0;

        }

};

 

int main() {

        cout <<  "Begin" << endl;

 

        AClass ac;

 

        ac.activate();

 

        cout << "Reactor: " <<

                ACE_Reactor::instance()->run_reactor_event_loop() <<
endl;

}

 

 

When run (of course, as root so that the seteuid call doesn't outright
fail), outputs:

 

Begin

Beginning task

Changing UIDs

Reactor: -1

 

 

    SAMPLE FIX/WORKAROUND:

 

I have experimented with passing a reactor event hook to the reactor:

 

int reh(ACE_Reactor *) {

  if (errno == 4) return 1;

 

  return 0;

}

 

And this seems to allow the reactor to continue to run:

 

Begin

Beginning task

Changing UIDs

Returning UIDs

Ending task

Reactor: 0

 

 

However, this would require one to use an event hook, and exploits a
different bug in ACE (see my previous PRF).

 

 

Regards,

 

Andre Kostur

Incognito Software Inc.

Senior Software Design Engineer

T: +1(604)678-2864

F: +1(604)688-4339

E: akostur at incognito.com

 

www.incognito.com

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://list.isis.vanderbilt.edu/pipermail/ace-users/attachments/20071120/ef40cfbe/attachment-0001.html 


More information about the Ace-users mailing list