lwip: Fix use-after-free memory corruption
authorMatt Fleming <matt.fleming@intel.com>
Tue, 19 Feb 2013 12:18:19 +0000 (12:18 +0000)
committerMatt Fleming <matt.fleming@intel.com>
Tue, 26 Feb 2013 11:29:13 +0000 (11:29 +0000)
Set *sem to NULL after free() otherwise calling sys_sem_set_invalid()
will cause us to write into a memory location that has potentially
either been reused for another allocation or contains freelist
metadata.

This manifested as malloc() corruption, because we
sys_sem_set_invalid() was overwriting malloc metadata used for
maintaining the freelist.

Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Gene Cumm <gene.cumm@gmail.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
core/lwip/src/arch/sys_arch.c

index 5f8437e..894f6ad 100644 (file)
@@ -25,6 +25,7 @@ void sys_sem_free(sys_sem_t *sem)
     if (!!sem && !!*sem) {
        sys_sem_set_invalid(sem);
        free(*sem);
+       *sem = NULL;
     }
 }