Reputation: 904
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
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