webgenius
webgenius

Reputation: 904

Android native process: stack corruption detected

I'm enhancing a native app which is already part of Google source. I'm seeing a crash. I have tried debugging this, but couldn't conclude. Your help is greatly appreciated:

struct device_global {
    struct support *sport;
    struct support_params params;
    struct global_priv *ctrl;

#if defined FEATURE_1
    int freq, freq_2;
#endif /* FEATURE_1 */

#ifdef FEATURE_2
    int wifi_display;
    #define SUBELEMS 10
    struct buf *subelem[MAX_SUBELEMS];
#endif /* FEATURE_2 */

    struct list_entry *add_list_entry;

#ifdef FEATURE_3
    void* my_context;
#endif /* FEATURE_3 */
};

typedef unsigned long       DWORD;
typedef DWORD           *PDWORD;

typedef struct
{
    DWORD dwFlags;
    DWORD dwErrorCode;
    DWORD dwDeviceId;

#ifdef FEATURE_X
    CHAR* tableFileName;
#endif

#ifdef FEATURE_Y
    FILE* tableFile;
    DWORD headerVersion;
    DWORD headerSize;
#endif
} CONTEXT1, *CONTEXT2;


struct device_global * init(struct support_params *params)
{
    struct device_global *global;
    global = os_malloc(sizeof(*global));
    if (params->ctrl)
            global->params.ctrl =  os_strdup(params->ctrl);
    // Assignment of other global variables done here like above (not added here to remove clutter)

    int deviceId = 0;
    if (0 == getDeviceId(global->my_context, (PDWORD) &deviceId))
    {
        printf("Device ID 0x%x", deviceId);
    }
    printf("Before returning global");    // gets printed before crash
    return global;   // crashes here
}



DWORD getDeviceId(PVOID pContext, PDWORD myDeviceId)
{
    CONTEXT2 myContext;

    if (!pContext || !myDeviceId)
    {
        return -1;
    }
    else
    {
        myContext = (CONTEXT2) pContext;
        *myDeviceId = myContext->dwDeviceId;
    }

    return 0;
}

The crash is happening exactly in init method at "return global". The printf statement gets printed and the crash appears after that. Kindly share your valuable input.

The error message corresponding to the crash is:

03-16 12:30:03.230  5626  5626 F DEBUG   : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
03-16 12:30:03.232  5626  5626 F DEBUG   : Abort message: 'stack corruption detected'

Upvotes: 0

Views: 4207

Answers (1)

Jabberwocky
Jabberwocky

Reputation: 50831

The my_context pointer is not initialized here:

if (0 == getDeviceId(global->my_context, (PDWORD) &deviceId))    

Therefore your program exhibits undefined behaviour which finally leads to a crash.

Upvotes: 1

Related Questions