In memwipe_check(), don't put magic on stack when calling do_magic()
Otherwise the magic might be on the stack while checking it.
This commit is contained in:
@@ -164,7 +164,7 @@ static bool equals(char *a, char *b)
|
|||||||
* Write magic to memory, and try to clear it with memwipe()
|
* Write magic to memory, and try to clear it with memwipe()
|
||||||
*/
|
*/
|
||||||
__attribute__((noinline))
|
__attribute__((noinline))
|
||||||
static void do_magic(int magic, int **stack)
|
static void do_magic(int *magic, int **stack)
|
||||||
{
|
{
|
||||||
int buf[MEMWIPE_WIPE_WORDS], i;
|
int buf[MEMWIPE_WIPE_WORDS], i;
|
||||||
|
|
||||||
@@ -172,7 +172,7 @@ static void do_magic(int magic, int **stack)
|
|||||||
*stack = &i;
|
*stack = &i;
|
||||||
for (i = 0; i < countof(buf); i++)
|
for (i = 0; i < countof(buf); i++)
|
||||||
{
|
{
|
||||||
buf[i] = magic;
|
buf[i] = *magic;
|
||||||
}
|
}
|
||||||
/* passing buf to dbg should make sure the compiler can't optimize out buf.
|
/* passing buf to dbg should make sure the compiler can't optimize out buf.
|
||||||
* we use directly dbg(3), as DBG3() might be stripped with DEBUG_LEVEL. */
|
* we use directly dbg(3), as DBG3() might be stripped with DEBUG_LEVEL. */
|
||||||
@@ -187,7 +187,7 @@ static bool check_memwipe()
|
|||||||
{
|
{
|
||||||
int magic = 0xCAFEBABE, *ptr, *deeper, i, stackdir = 1;
|
int magic = 0xCAFEBABE, *ptr, *deeper, i, stackdir = 1;
|
||||||
|
|
||||||
do_magic(magic, &deeper);
|
do_magic(&magic, &deeper);
|
||||||
|
|
||||||
ptr = &magic;
|
ptr = &magic;
|
||||||
if (deeper < ptr)
|
if (deeper < ptr)
|
||||||
|
|||||||
Reference in New Issue
Block a user