autosuspend_inited flag set even if initialization fails
Prevents possible SIGSEGV on second autosuspend_enable attempt when first intialization attempt fails. autosuspend_inited should only be set once autosuspend_ops has been assigned. Consider the first call to autosuspend_enable(). autosuspend_init() sets its inited flag to true, and attempts to set autosuspend_ops. If all the other autosuspend_*_init() attempts fail, autosuspend_init() returns -1, which autosuspend_enable() will return as a failure. A second call to autosuspend_enable() will check autosuspend_init() and see that autosuspend has already been initialized. It will attempt to access autosuspend_ops, which were not set in the first initialization attempt, causing a SIGSEGV. Change-Id: Ib2d3ee62fee4c3b6d0323e5b7f3709a23c6b923f
This commit is contained in:
parent
3ddc0059bb
commit
a26b4caf4c
|
@ -33,8 +33,6 @@ static int autosuspend_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
autosuspend_inited = true;
|
||||
|
||||
autosuspend_ops = autosuspend_earlysuspend_init();
|
||||
if (autosuspend_ops) {
|
||||
goto out;
|
||||
|
@ -56,6 +54,8 @@ static int autosuspend_init(void)
|
|||
}
|
||||
|
||||
out:
|
||||
autosuspend_inited = true;
|
||||
|
||||
ALOGV("autosuspend initialized\n");
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue